{
    "id": "1cd64db7a8ac0a153df93d26826ad4e9",
    "_format": "hh-sol-build-info-1",
    "solcVersion": "0.8.9",
    "solcLongVersion": "0.8.9+commit.e5eed63a",
    "input": {
        "language": "Solidity",
        "sources": {
            "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// Copied with no modifications from Polygon demo FxTunnel repo: https://github.com/jdkanani/fx-portal\n// except bumping version from 0.7.3 --> 0.8\npragma solidity ^0.8.0;\n\n// IFxMessageProcessor represents interface to process message\ninterface IFxMessageProcessor {\n    function processMessageFromRoot(\n        uint256 stateId,\n        address rootMessageSender,\n        bytes calldata data\n    ) external;\n}\n\n/**\n * @notice Mock child tunnel contract to receive and send message from L2\n */\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\n    // MessageTunnel on L1 will get data from this event\n    event MessageSent(bytes message);\n\n    // fx child\n    address public fxChild;\n\n    // fx root tunnel\n    address public fxRootTunnel;\n\n    constructor(address _fxChild) {\n        fxChild = _fxChild;\n    }\n\n    // Sender must be fxRootTunnel.\n    modifier validateSender(address sender) {\n        require(sender == fxRootTunnel, \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\");\n        _;\n    }\n\n    // Set fxRootTunnel if not set already.\n    function setFxRootTunnel(address _fxRootTunnel) public {\n        require(fxRootTunnel == address(0x0), \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\");\n        fxRootTunnel = _fxRootTunnel;\n    }\n\n    function processMessageFromRoot(\n        uint256 stateId,\n        address rootMessageSender,\n        bytes calldata data\n    ) public override {\n        require(msg.sender == fxChild, \"FxBaseChildTunnel: INVALID_SENDER\");\n        _processMessageFromRoot(stateId, rootMessageSender, data);\n    }\n\n    /**\n     * @notice Emit message that can be received on Root Tunnel\n     * @dev Call the internal function when need to emit message\n     * @param message bytes message that will be sent to Root Tunnel\n     * some message examples -\n     *   abi.encode(tokenId);\n     *   abi.encode(tokenId, tokenMetadata);\n     *   abi.encode(messageType, messageData);\n     */\n    function _sendMessageToRoot(bytes memory message) internal {\n        emit MessageSent(message);\n    }\n\n    /**\n     * @notice Process message received from Root Tunnel\n     * @dev function needs to be implemented to handle message as per requirement\n     * This is called by onStateReceive function.\n     * Since it is called via a system call, any event will not be emitted during its execution.\n     * @param stateId unique state id\n     * @param sender root message sender\n     * @param message bytes message that was sent from Root Tunnel\n     */\n    function _processMessageFromRoot(\n        uint256 stateId,\n        address sender,\n        bytes memory message\n    ) internal virtual;\n}\n"
            }
        },
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 1000000
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "evm.bytecode",
                        "evm.deployedBytecode",
                        "evm.methodIdentifiers",
                        "metadata",
                        "devdoc",
                        "userdoc",
                        "storageLayout",
                        "evm.gasEstimates"
                    ],
                    "": [
                        "ast"
                    ]
                }
            },
            "metadata": {
                "useLiteralContent": true
            }
        }
    },
    "output": {
        "contracts": {
            "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol": {
                "FxBaseChildTunnel": {
                    "abi": [
                        {
                            "anonymous": false,
                            "inputs": [
                                {
                                    "indexed": false,
                                    "internalType": "bytes",
                                    "name": "message",
                                    "type": "bytes"
                                }
                            ],
                            "name": "MessageSent",
                            "type": "event"
                        },
                        {
                            "inputs": [],
                            "name": "fxChild",
                            "outputs": [
                                {
                                    "internalType": "address",
                                    "name": "",
                                    "type": "address"
                                }
                            ],
                            "stateMutability": "view",
                            "type": "function"
                        },
                        {
                            "inputs": [],
                            "name": "fxRootTunnel",
                            "outputs": [
                                {
                                    "internalType": "address",
                                    "name": "",
                                    "type": "address"
                                }
                            ],
                            "stateMutability": "view",
                            "type": "function"
                        },
                        {
                            "inputs": [
                                {
                                    "internalType": "uint256",
                                    "name": "stateId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "rootMessageSender",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "name": "processMessageFromRoot",
                            "outputs": [],
                            "stateMutability": "nonpayable",
                            "type": "function"
                        },
                        {
                            "inputs": [
                                {
                                    "internalType": "address",
                                    "name": "_fxRootTunnel",
                                    "type": "address"
                                }
                            ],
                            "name": "setFxRootTunnel",
                            "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": {
                            "fxChild()": "450d11f0",
                            "fxRootTunnel()": "7f1e9cb0",
                            "processMessageFromRoot(uint256,address,bytes)": "9a7c4b71",
                            "setFxRootTunnel(address)": "88837094"
                        }
                    },
                    "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"fxChild\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxRootTunnel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stateId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rootMessageSender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fxRootTunnel\",\"type\":\"address\"}],\"name\":\"setFxRootTunnel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Mock child tunnel contract to receive and send message from L2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/external/polygon/tunnel/FxBaseChildTunnel.sol\":\"FxBaseChildTunnel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/external/polygon/tunnel/FxBaseChildTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Copied with no modifications from Polygon demo FxTunnel repo: https://github.com/jdkanani/fx-portal\\n// except bumping version from 0.7.3 --> 0.8\\npragma solidity ^0.8.0;\\n\\n// IFxMessageProcessor represents interface to process message\\ninterface IFxMessageProcessor {\\n    function processMessageFromRoot(\\n        uint256 stateId,\\n        address rootMessageSender,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n/**\\n * @notice Mock child tunnel contract to receive and send message from L2\\n */\\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\\n    // MessageTunnel on L1 will get data from this event\\n    event MessageSent(bytes message);\\n\\n    // fx child\\n    address public fxChild;\\n\\n    // fx root tunnel\\n    address public fxRootTunnel;\\n\\n    constructor(address _fxChild) {\\n        fxChild = _fxChild;\\n    }\\n\\n    // Sender must be fxRootTunnel.\\n    modifier validateSender(address sender) {\\n        require(sender == fxRootTunnel, \\\"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\\\");\\n        _;\\n    }\\n\\n    // Set fxRootTunnel if not set already.\\n    function setFxRootTunnel(address _fxRootTunnel) public {\\n        require(fxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n        fxRootTunnel = _fxRootTunnel;\\n    }\\n\\n    function processMessageFromRoot(\\n        uint256 stateId,\\n        address rootMessageSender,\\n        bytes calldata data\\n    ) public override {\\n        require(msg.sender == fxChild, \\\"FxBaseChildTunnel: INVALID_SENDER\\\");\\n        _processMessageFromRoot(stateId, rootMessageSender, data);\\n    }\\n\\n    /**\\n     * @notice Emit message that can be received on Root Tunnel\\n     * @dev Call the internal function when need to emit message\\n     * @param message bytes message that will be sent to Root Tunnel\\n     * some message examples -\\n     *   abi.encode(tokenId);\\n     *   abi.encode(tokenId, tokenMetadata);\\n     *   abi.encode(messageType, messageData);\\n     */\\n    function _sendMessageToRoot(bytes memory message) internal {\\n        emit MessageSent(message);\\n    }\\n\\n    /**\\n     * @notice Process message received from Root Tunnel\\n     * @dev function needs to be implemented to handle message as per requirement\\n     * This is called by onStateReceive function.\\n     * Since it is called via a system call, any event will not be emitted during its execution.\\n     * @param stateId unique state id\\n     * @param sender root message sender\\n     * @param message bytes message that was sent from Root Tunnel\\n     */\\n    function _processMessageFromRoot(\\n        uint256 stateId,\\n        address sender,\\n        bytes memory message\\n    ) internal virtual;\\n}\\n\",\"keccak256\":\"0x02468221bd1449967a7ff0fd538c13b62e954d0efa0a2fad55388967415849dc\",\"license\":\"MIT\"}},\"version\":1}",
                    "storageLayout": {
                        "storage": [
                            {
                                "astId": 20,
                                "contract": "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol:FxBaseChildTunnel",
                                "label": "fxChild",
                                "offset": 0,
                                "slot": "0",
                                "type": "t_address"
                            },
                            {
                                "astId": 22,
                                "contract": "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol:FxBaseChildTunnel",
                                "label": "fxRootTunnel",
                                "offset": 0,
                                "slot": "1",
                                "type": "t_address"
                            }
                        ],
                        "types": {
                            "t_address": {
                                "encoding": "inplace",
                                "label": "address",
                                "numberOfBytes": "20"
                            }
                        }
                    },
                    "userdoc": {
                        "kind": "user",
                        "methods": {},
                        "notice": "Mock child tunnel contract to receive and send message from L2",
                        "version": 1
                    }
                },
                "IFxMessageProcessor": {
                    "abi": [
                        {
                            "inputs": [
                                {
                                    "internalType": "uint256",
                                    "name": "stateId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "rootMessageSender",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "name": "processMessageFromRoot",
                            "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": {
                            "processMessageFromRoot(uint256,address,bytes)": "9a7c4b71"
                        }
                    },
                    "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stateId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rootMessageSender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/external/polygon/tunnel/FxBaseChildTunnel.sol\":\"IFxMessageProcessor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/external/polygon/tunnel/FxBaseChildTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Copied with no modifications from Polygon demo FxTunnel repo: https://github.com/jdkanani/fx-portal\\n// except bumping version from 0.7.3 --> 0.8\\npragma solidity ^0.8.0;\\n\\n// IFxMessageProcessor represents interface to process message\\ninterface IFxMessageProcessor {\\n    function processMessageFromRoot(\\n        uint256 stateId,\\n        address rootMessageSender,\\n        bytes calldata data\\n    ) external;\\n}\\n\\n/**\\n * @notice Mock child tunnel contract to receive and send message from L2\\n */\\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\\n    // MessageTunnel on L1 will get data from this event\\n    event MessageSent(bytes message);\\n\\n    // fx child\\n    address public fxChild;\\n\\n    // fx root tunnel\\n    address public fxRootTunnel;\\n\\n    constructor(address _fxChild) {\\n        fxChild = _fxChild;\\n    }\\n\\n    // Sender must be fxRootTunnel.\\n    modifier validateSender(address sender) {\\n        require(sender == fxRootTunnel, \\\"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\\\");\\n        _;\\n    }\\n\\n    // Set fxRootTunnel if not set already.\\n    function setFxRootTunnel(address _fxRootTunnel) public {\\n        require(fxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n        fxRootTunnel = _fxRootTunnel;\\n    }\\n\\n    function processMessageFromRoot(\\n        uint256 stateId,\\n        address rootMessageSender,\\n        bytes calldata data\\n    ) public override {\\n        require(msg.sender == fxChild, \\\"FxBaseChildTunnel: INVALID_SENDER\\\");\\n        _processMessageFromRoot(stateId, rootMessageSender, data);\\n    }\\n\\n    /**\\n     * @notice Emit message that can be received on Root Tunnel\\n     * @dev Call the internal function when need to emit message\\n     * @param message bytes message that will be sent to Root Tunnel\\n     * some message examples -\\n     *   abi.encode(tokenId);\\n     *   abi.encode(tokenId, tokenMetadata);\\n     *   abi.encode(messageType, messageData);\\n     */\\n    function _sendMessageToRoot(bytes memory message) internal {\\n        emit MessageSent(message);\\n    }\\n\\n    /**\\n     * @notice Process message received from Root Tunnel\\n     * @dev function needs to be implemented to handle message as per requirement\\n     * This is called by onStateReceive function.\\n     * Since it is called via a system call, any event will not be emitted during its execution.\\n     * @param stateId unique state id\\n     * @param sender root message sender\\n     * @param message bytes message that was sent from Root Tunnel\\n     */\\n    function _processMessageFromRoot(\\n        uint256 stateId,\\n        address sender,\\n        bytes memory message\\n    ) internal virtual;\\n}\\n\",\"keccak256\":\"0x02468221bd1449967a7ff0fd538c13b62e954d0efa0a2fad55388967415849dc\",\"license\":\"MIT\"}},\"version\":1}",
                    "storageLayout": {
                        "storage": [],
                        "types": null
                    },
                    "userdoc": {
                        "kind": "user",
                        "methods": {},
                        "version": 1
                    }
                }
            }
        },
        "sources": {
            "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol": {
                "ast": {
                    "absolutePath": "contracts/external/polygon/tunnel/FxBaseChildTunnel.sol",
                    "exportedSymbols": {
                        "FxBaseChildTunnel": [
                            112
                        ],
                        "IFxMessageProcessor": [
                            11
                        ]
                    },
                    "id": 113,
                    "license": "MIT",
                    "nodeType": "SourceUnit",
                    "nodes": [
                        {
                            "id": 1,
                            "literals": [
                                "solidity",
                                "^",
                                "0.8",
                                ".0"
                            ],
                            "nodeType": "PragmaDirective",
                            "src": "180:23:0"
                        },
                        {
                            "abstract": false,
                            "baseContracts": [],
                            "canonicalName": "IFxMessageProcessor",
                            "contractDependencies": [],
                            "contractKind": "interface",
                            "fullyImplemented": false,
                            "id": 11,
                            "linearizedBaseContracts": [
                                11
                            ],
                            "name": "IFxMessageProcessor",
                            "nameLocation": "278:19:0",
                            "nodeType": "ContractDefinition",
                            "nodes": [
                                {
                                    "functionSelector": "9a7c4b71",
                                    "id": 10,
                                    "implemented": false,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "processMessageFromRoot",
                                    "nameLocation": "313:22:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 8,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 3,
                                                "mutability": "mutable",
                                                "name": "stateId",
                                                "nameLocation": "353:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 10,
                                                "src": "345:15:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 2,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "345:7:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 5,
                                                "mutability": "mutable",
                                                "name": "rootMessageSender",
                                                "nameLocation": "378:17:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 10,
                                                "src": "370:25:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 4,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "370:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 7,
                                                "mutability": "mutable",
                                                "name": "data",
                                                "nameLocation": "420:4:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 10,
                                                "src": "405:19:0",
                                                "stateVariable": false,
                                                "storageLocation": "calldata",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 6,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "405:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "335:95:0"
                                    },
                                    "returnParameters": {
                                        "id": 9,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "439:0:0"
                                    },
                                    "scope": 11,
                                    "src": "304:136:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "external"
                                }
                            ],
                            "scope": 113,
                            "src": "268:174:0",
                            "usedErrors": []
                        },
                        {
                            "abstract": true,
                            "baseContracts": [
                                {
                                    "baseName": {
                                        "id": 13,
                                        "name": "IFxMessageProcessor",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 11,
                                        "src": "565:19:0"
                                    },
                                    "id": 14,
                                    "nodeType": "InheritanceSpecifier",
                                    "src": "565:19:0"
                                }
                            ],
                            "canonicalName": "FxBaseChildTunnel",
                            "contractDependencies": [],
                            "contractKind": "contract",
                            "documentation": {
                                "id": 12,
                                "nodeType": "StructuredDocumentation",
                                "src": "444:81:0",
                                "text": " @notice Mock child tunnel contract to receive and send message from L2"
                            },
                            "fullyImplemented": false,
                            "id": 112,
                            "linearizedBaseContracts": [
                                112,
                                11
                            ],
                            "name": "FxBaseChildTunnel",
                            "nameLocation": "544:17:0",
                            "nodeType": "ContractDefinition",
                            "nodes": [
                                {
                                    "anonymous": false,
                                    "id": 18,
                                    "name": "MessageSent",
                                    "nameLocation": "654:11:0",
                                    "nodeType": "EventDefinition",
                                    "parameters": {
                                        "id": 17,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 16,
                                                "indexed": false,
                                                "mutability": "mutable",
                                                "name": "message",
                                                "nameLocation": "672:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 18,
                                                "src": "666:13:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 15,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "666:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "665:15:0"
                                    },
                                    "src": "648:33:0"
                                },
                                {
                                    "constant": false,
                                    "functionSelector": "450d11f0",
                                    "id": 20,
                                    "mutability": "mutable",
                                    "name": "fxChild",
                                    "nameLocation": "718:7:0",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 112,
                                    "src": "703:22:0",
                                    "stateVariable": true,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 19,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "703:7:0",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "public"
                                },
                                {
                                    "constant": false,
                                    "functionSelector": "7f1e9cb0",
                                    "id": 22,
                                    "mutability": "mutable",
                                    "name": "fxRootTunnel",
                                    "nameLocation": "769:12:0",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 112,
                                    "src": "754:27:0",
                                    "stateVariable": true,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 21,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "754:7:0",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "public"
                                },
                                {
                                    "body": {
                                        "id": 31,
                                        "nodeType": "Block",
                                        "src": "818:35:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 29,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 27,
                                                        "name": "fxChild",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 20,
                                                        "src": "828:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "id": 28,
                                                        "name": "_fxChild",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 24,
                                                        "src": "838:8:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "828:18:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 30,
                                                "nodeType": "ExpressionStatement",
                                                "src": "828:18:0"
                                            }
                                        ]
                                    },
                                    "id": 32,
                                    "implemented": true,
                                    "kind": "constructor",
                                    "modifiers": [],
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 25,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 24,
                                                "mutability": "mutable",
                                                "name": "_fxChild",
                                                "nameLocation": "808:8:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 32,
                                                "src": "800:16:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 23,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "800:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "799:18:0"
                                    },
                                    "returnParameters": {
                                        "id": 26,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "818:0:0"
                                    },
                                    "scope": 112,
                                    "src": "788:65:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "internal"
                                },
                                {
                                    "body": {
                                        "id": 44,
                                        "nodeType": "Block",
                                        "src": "935:106:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 39,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 37,
                                                                "name": "sender",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 34,
                                                                "src": "953:6:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "id": 38,
                                                                "name": "fxRootTunnel",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 22,
                                                                "src": "963:12:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "953:22:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e4445525f46524f4d5f524f4f54",
                                                            "id": 40,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "977:45:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\""
                                                            },
                                                            "value": "FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\""
                                                            }
                                                        ],
                                                        "id": 36,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "945:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 41,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "945:78:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 42,
                                                "nodeType": "ExpressionStatement",
                                                "src": "945:78:0"
                                            },
                                            {
                                                "id": 43,
                                                "nodeType": "PlaceholderStatement",
                                                "src": "1033:1:0"
                                            }
                                        ]
                                    },
                                    "id": 45,
                                    "name": "validateSender",
                                    "nameLocation": "904:14:0",
                                    "nodeType": "ModifierDefinition",
                                    "parameters": {
                                        "id": 35,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 34,
                                                "mutability": "mutable",
                                                "name": "sender",
                                                "nameLocation": "927:6:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 45,
                                                "src": "919:14:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 33,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "919:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "918:16:0"
                                    },
                                    "src": "895:146:0",
                                    "virtual": false,
                                    "visibility": "internal"
                                },
                                {
                                    "body": {
                                        "id": 64,
                                        "nodeType": "Block",
                                        "src": "1146:138:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 56,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 51,
                                                                "name": "fxRootTunnel",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 22,
                                                                "src": "1164:12:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "307830",
                                                                        "id": 54,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "1188:3:0",
                                                                        "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": 53,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "1180:7:0",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 52,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "1180:7:0",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 55,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "1180:12:0",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "1164:28:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f414c52454144595f534554",
                                                            "id": 57,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1194:44:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\""
                                                            },
                                                            "value": "FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\""
                                                            }
                                                        ],
                                                        "id": 50,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "1156:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 58,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1156:83:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 59,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1156:83:0"
                                            },
                                            {
                                                "expression": {
                                                    "id": 62,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 60,
                                                        "name": "fxRootTunnel",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 22,
                                                        "src": "1249:12:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "id": 61,
                                                        "name": "_fxRootTunnel",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 47,
                                                        "src": "1264:13:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "1249:28:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 63,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1249:28:0"
                                            }
                                        ]
                                    },
                                    "functionSelector": "88837094",
                                    "id": 65,
                                    "implemented": true,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "setFxRootTunnel",
                                    "nameLocation": "1100:15:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 48,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 47,
                                                "mutability": "mutable",
                                                "name": "_fxRootTunnel",
                                                "nameLocation": "1124:13:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 65,
                                                "src": "1116:21:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 46,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1116:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1115:23:0"
                                    },
                                    "returnParameters": {
                                        "id": 49,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "1146:0:0"
                                    },
                                    "scope": 112,
                                    "src": "1091:193:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "public"
                                },
                                {
                                    "baseFunctions": [
                                        10
                                    ],
                                    "body": {
                                        "id": 89,
                                        "nodeType": "Block",
                                        "src": "1433:151:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 79,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 76,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -15,
                                                                    "src": "1451:3:0",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 77,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "1451:10:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "id": 78,
                                                                "name": "fxChild",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 20,
                                                                "src": "1465:7:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "1451:21:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444552",
                                                            "id": 80,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1474:35:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: INVALID_SENDER\""
                                                            },
                                                            "value": "FxBaseChildTunnel: INVALID_SENDER"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533",
                                                                "typeString": "literal_string \"FxBaseChildTunnel: INVALID_SENDER\""
                                                            }
                                                        ],
                                                        "id": 75,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "1443:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 81,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1443:67:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 82,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1443:67:0"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 84,
                                                            "name": "stateId",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 67,
                                                            "src": "1544:7:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "id": 85,
                                                            "name": "rootMessageSender",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 69,
                                                            "src": "1553:17:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "id": 86,
                                                            "name": "data",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 71,
                                                            "src": "1572:4:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        ],
                                                        "id": 83,
                                                        "name": "_processMessageFromRoot",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 111,
                                                        "src": "1520:23:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (uint256,address,bytes memory)"
                                                        }
                                                    },
                                                    "id": 87,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1520:57:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 88,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1520:57:0"
                                            }
                                        ]
                                    },
                                    "functionSelector": "9a7c4b71",
                                    "id": 90,
                                    "implemented": true,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "processMessageFromRoot",
                                    "nameLocation": "1299:22:0",
                                    "nodeType": "FunctionDefinition",
                                    "overrides": {
                                        "id": 73,
                                        "nodeType": "OverrideSpecifier",
                                        "overrides": [],
                                        "src": "1424:8:0"
                                    },
                                    "parameters": {
                                        "id": 72,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 67,
                                                "mutability": "mutable",
                                                "name": "stateId",
                                                "nameLocation": "1339:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 90,
                                                "src": "1331:15:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 66,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1331:7:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 69,
                                                "mutability": "mutable",
                                                "name": "rootMessageSender",
                                                "nameLocation": "1364:17:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 90,
                                                "src": "1356:25:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 68,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1356:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 71,
                                                "mutability": "mutable",
                                                "name": "data",
                                                "nameLocation": "1406:4:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 90,
                                                "src": "1391:19:0",
                                                "stateVariable": false,
                                                "storageLocation": "calldata",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 70,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1391:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1321:95:0"
                                    },
                                    "returnParameters": {
                                        "id": 74,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "1433:0:0"
                                    },
                                    "scope": 112,
                                    "src": "1290:294:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "public"
                                },
                                {
                                    "body": {
                                        "id": 100,
                                        "nodeType": "Block",
                                        "src": "2016:42:0",
                                        "statements": [
                                            {
                                                "eventCall": {
                                                    "arguments": [
                                                        {
                                                            "id": 97,
                                                            "name": "message",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 93,
                                                            "src": "2043:7:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "id": 96,
                                                        "name": "MessageSent",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 18,
                                                        "src": "2031:11:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_event_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (bytes memory)"
                                                        }
                                                    },
                                                    "id": 98,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2031:20:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 99,
                                                "nodeType": "EmitStatement",
                                                "src": "2026:25:0"
                                            }
                                        ]
                                    },
                                    "documentation": {
                                        "id": 91,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "1590:362:0",
                                        "text": " @notice Emit message that can be received on Root Tunnel\n @dev Call the internal function when need to emit message\n @param message bytes message that will be sent to Root Tunnel\n some message examples -\n   abi.encode(tokenId);\n   abi.encode(tokenId, tokenMetadata);\n   abi.encode(messageType, messageData);"
                                    },
                                    "id": 101,
                                    "implemented": true,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "_sendMessageToRoot",
                                    "nameLocation": "1966:18:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 94,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 93,
                                                "mutability": "mutable",
                                                "name": "message",
                                                "nameLocation": "1998:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 101,
                                                "src": "1985:20:0",
                                                "stateVariable": false,
                                                "storageLocation": "memory",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 92,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1985:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1984:22:0"
                                    },
                                    "returnParameters": {
                                        "id": 95,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "2016:0:0"
                                    },
                                    "scope": 112,
                                    "src": "1957:101:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "internal"
                                },
                                {
                                    "documentation": {
                                        "id": 102,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "2064:443:0",
                                        "text": " @notice Process message received from Root Tunnel\n @dev function needs to be implemented to handle message as per requirement\n This is called by onStateReceive function.\n Since it is called via a system call, any event will not be emitted during its execution.\n @param stateId unique state id\n @param sender root message sender\n @param message bytes message that was sent from Root Tunnel"
                                    },
                                    "id": 111,
                                    "implemented": false,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "_processMessageFromRoot",
                                    "nameLocation": "2521:23:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 109,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 104,
                                                "mutability": "mutable",
                                                "name": "stateId",
                                                "nameLocation": "2562:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 111,
                                                "src": "2554:15:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 103,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2554:7:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 106,
                                                "mutability": "mutable",
                                                "name": "sender",
                                                "nameLocation": "2587:6:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 111,
                                                "src": "2579:14:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 105,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2579:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 108,
                                                "mutability": "mutable",
                                                "name": "message",
                                                "nameLocation": "2616:7:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 111,
                                                "src": "2603:20:0",
                                                "stateVariable": false,
                                                "storageLocation": "memory",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 107,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2603:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "2544:85:0"
                                    },
                                    "returnParameters": {
                                        "id": 110,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "2646:0:0"
                                    },
                                    "scope": 112,
                                    "src": "2512:135:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": true,
                                    "visibility": "internal"
                                }
                            ],
                            "scope": 113,
                            "src": "526:2123:0",
                            "usedErrors": []
                        }
                    ],
                    "src": "180:2470:0"
                },
                "id": 0
            }
        }
    }
}
