{
    "contractName": "RelayHub",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "_stakeManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_penalizer",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_batchGateway",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_relayRegistrar",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balance",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerBalanceEscheated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Deposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "HubDeprecated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "config",
                    "type": "tuple"
                }
            ],
            "name": "RelayHubConfigured",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "workersCount",
                    "type": "uint256"
                }
            ],
            "name": "RelayWorkersAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "minimumStake",
                    "type": "uint256"
                }
            ],
            "name": "StakingTokenDataChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "innerGasUsed",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "reason",
                    "type": "bytes"
                }
            ],
            "name": "TransactionRejectedByPaymaster",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "TransactionRelayed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "name": "TransactionResult",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Withdrawn",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionHub",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getConfiguration",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxWorkerCount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasReserve",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "gasOverhead",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "name": "setConfiguration",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20[]",
                    "name": "token",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "minimumStake",
                    "type": "uint256[]"
                }
            ],
            "name": "setMinimumStakes",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getDeprecationTime",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStakeManager",
            "outputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizer",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBatchGateway",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayRegistrar",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "getMinimumStakePerToken",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "worker",
                    "type": "address"
                }
            ],
            "name": "getWorkerManager",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "manager",
                    "type": "address"
                }
            ],
            "name": "getWorkerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "onRelayServerRegistered",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                }
            ],
            "name": "addRelayWorkers",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "depositFor",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable[]",
                    "name": "dest",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amount",
                    "type": "uint256[]"
                }
            ],
            "name": "withdrawMultiple",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAcceptanceBudget",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                }
            ],
            "name": "relayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "paymasterAccepted",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                },
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "calldataSizeLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasAndDataLimits",
                    "name": "gasAndDataLimits",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "totalInitialGas",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "innerRelayCall",
            "outputs": [
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "calculateDevCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "gasUsed",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "maxFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxPriorityFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "transactionCalldataGasUsed",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "calculateCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "verifyRelayManagerStaked",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "deprecateHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isDeprecated",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "beneficiary",
                    "type": "address"
                }
            ],
            "name": "penalize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayBalance",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "aggregateGasleft",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"_stakeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_penalizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batchGateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_relayRegistrar\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerBalanceEscheated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deprecationTime\",\"type\":\"uint256\"}],\"name\":\"HubDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RelayHubConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workersCount\",\"type\":\"uint256\"}],\"name\":\"RelayWorkersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"}],\"name\":\"StakingTokenDataChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"innerGasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TransactionRejectedByPaymaster\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"TransactionRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"name\":\"TransactionResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dest\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"}],\"name\":\"addRelayWorkers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregateGasleft\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"calculateCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"calculateDevCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deprecationTime\",\"type\":\"uint256\"}],\"name\":\"deprecateHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBatchGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeprecationTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMinimumStakePerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayRegistrar\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeManager\",\"outputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getWorkerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"calldataSizeLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasAndDataLimits\",\"name\":\"gasAndDataLimits\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalInitialGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"innerRelayCall\",\"outputs\":[{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayEscheatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"onRelayServerRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"penalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptanceBudget\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"}],\"name\":\"relayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paymasterAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"},{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"token\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minimumStake\",\"type\":\"uint256[]\"}],\"name\":\"setMinimumStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"verifyRelayManagerStaked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionHub\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"dest\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"withdrawMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"aggregateGasleft()\":{\"returns\":{\"_0\":\"A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs.\"}},\"balanceOf(address)\":{\"returns\":{\"_0\":\"An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager.\"}},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"gasUsed\":\"An amount of gas used by the transaction.\",\"relayData\":\"The details of a transaction signed by the sender.\"},\"returns\":{\"_0\":\"The calculated charge, in wei.\"}},\"calculateDevCharge(uint256)\":{\"params\":{\"charge\":\"The amount of Ether in wei the Paymaster will be charged for this transaction.\"},\"returns\":{\"_0\":\"The calculated devFee, in wei.\"}},\"deprecateHub(uint256)\":{\"params\":{\"_deprecationTime\":\"The timestamp in seconds after which the `RelayHub` stops serving transactions.\"}},\"getBatchGateway()\":{\"returns\":{\"_0\":\"The `BatchGateway` address for this `RelayHub`.\"}},\"getConfiguration()\":{\"returns\":{\"_0\":\"The configuration of the `RelayHub`.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"The block number in which the contract has been deployed.\"}},\"getDeprecationTime()\":{\"returns\":{\"_0\":\"The timestamp from which the hub no longer allows relaying calls.\"}},\"getMinimumStakePerToken(address)\":{\"params\":{\"token\":\"An address of an ERC-20 compatible tokens.\"},\"returns\":{\"_0\":\"The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"}},\"getPenalizer()\":{\"returns\":{\"_0\":\"The `Penalizer` address for this `RelayHub`.\"}},\"getRelayRegistrar()\":{\"returns\":{\"_0\":\"The `RelayRegistrar` address for this `RelayHub`.\"}},\"getStakeManager()\":{\"returns\":{\"_0\":\"The `StakeManager` address for this `RelayHub`.\"}},\"getWorkerCount(address)\":{\"params\":{\"manager\":\"An address of the Relay Manager.\"},\"returns\":{\"_0\":\"The count of Relay Workers associated with this Relay Manager.\"}},\"getWorkerManager(address)\":{\"params\":{\"worker\":\"An address of the Relay Worker.\"},\"returns\":{\"_0\":\"The address of its Relay Manager.\"}},\"isDeprecated()\":{\"returns\":{\"_0\":\"`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"penalize(address,address)\":{\"params\":{\"beneficiary\":\"The address that called the `Penalizer` and will receive a reward for it.\",\"relayWorker\":\"The address of the Relay Worker that committed a penalizable offense.\"}},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"params\":{\"approvalData\":\"The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.\",\"domainSeparatorName\":\"The name of the Domain Separator used to verify the EIP-712 signature\",\"maxAcceptanceBudget\":\"The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\",\"relayRequest\":\"All details of the requested relayed call.\",\"signature\":\"The client's EIP-712 signature over the `relayRequest` struct.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"params\":{\"_config\":\"The new configuration.\"}},\"setMinimumStakes(address[],uint256[])\":{\"params\":{\"minimumStake\":\"An array of minimal amounts necessary for a corresponding token, in wei.\",\"token\":\"An array of addresses of ERC-20 compatible tokens.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"versionHub()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `RelayHub` contract.\"}}},\"title\":\"The RelayHub Implementation\",\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerBalanceEscheated(address,uint256)\":{\"notice\":\"This event is emitted in case a `relayManager` has been deemed \\\"abandoned\\\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`.\"},\"Deposited(address,address,uint256)\":{\"notice\":\"Emitted when `depositFor` is called, including the amount and account that was funded.\"},\"HubDeprecated(uint256)\":{\"notice\":\"This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon.\"},\"RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Emitted when a configuration of the `RelayHub` is changed\"},\"RelayWorkersAdded(address,address[],uint256)\":{\"notice\":\"Emitted when relays are added by a relayManager\"},\"StakingTokenDataChanged(address,uint256)\":{\"notice\":\"Emitted for each token configured for staking in setMinimumStakes\"},\"TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)\":{\"notice\":\"Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged.\"},\"TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)\":{\"notice\":\"Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`.\"},\"TransactionResult(uint8,bytes)\":{\"notice\":\"This event is emitted in case the internal function returns a value or reverts with a revert string.\"},\"Withdrawn(address,address,uint256)\":{\"notice\":\"Emitted when an account withdraws funds from the `RelayHub`.\"}},\"kind\":\"user\",\"methods\":{\"addRelayWorkers(address[])\":{\"notice\":\"Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events.\"},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\"},\"calculateDevCharge(uint256)\":{\"notice\":\"The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\"},\"depositFor(address)\":{\"notice\":\"Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event.\"},\"deprecateHub(uint256)\":{\"notice\":\"Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\"},\"escheatAbandonedRelayBalance(address)\":{\"notice\":\"@param relayManager\"},\"innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)\":{\"notice\":\"This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context.\"},\"isRelayEscheatable(address)\":{\"notice\":\"Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\"},\"onRelayServerRegistered(address)\":{\"notice\":\"The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration.\"},\"penalize(address,address)\":{\"notice\":\"In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\"},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"notice\":\"Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Sets or changes the configuration of this `RelayHub`.\"},\"setMinimumStakes(address[],uint256[])\":{\"notice\":\"Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"},\"verifyRelayManagerStaked(address)\":{\"notice\":\"Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise.\"},\"withdraw(address,uint256)\":{\"notice\":\"Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event.\"},\"withdrawMultiple(address[],uint256[])\":{\"notice\":\"Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination.\"}},\"notice\":\"This contract implements the `IRelayHub` interface for the EVM-compatible networks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol\":\"RelayHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol\":{\"keccak256\":\"0x648b59b36277a18170de742ab21f7f67d2beb817332b34fbd4b9eeccf820fcce\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://809ae9342d57c8d6ff6d6579f8c6c238f4df7eb9155b2b0ba3351630550a4d7b\",\"dweb:/ipfs/QmdH2AKJTEHE9WcZMt1rqGs5qCFF7d2HGoWRowYdSK9H4w\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC2771Recipient.sol\":{\"keccak256\":\"0x92a3665ec2fc3d2ab78cf8a08451b2ab6466dc7fae3c215150be2132500406fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364eee344363535733b4cc1a7748e1fc8b10786f6df6c0e2bc0082bcb2477e0e\",\"dweb:/ipfs/QmfCwWAxFqU4woSqu3g5BFPASEA7eCSwcwUSHM9EoYhYdu\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x205617108fad6f3543fc12773e9d25998e944852e8ed9d71f79cb799ae299246\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4903018f63b15211f2714edcf1c56f5c0bee6fea07efaaf908d3a78d07fb6d84\",\"dweb:/ipfs/Qmezexeh6GszFUHW2dgTGWTfb613Ni3tfjLqAtdAYAxCpQ\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayRegistrar.sol\":{\"keccak256\":\"0xece9624dac85ba58f820860722fcfe7ea331159c8b3f172dd6450350fc1d35f0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://3dae31c7fe1bbfbf7d7d73fddea3d2a5b27a15a2ec5f3bd9c17bd9e3f16caf74\",\"dweb:/ipfs/QmULwg82urTQx2fQDHYQoCve3QWJmGQXCPoMNB4Twafh1D\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol\":{\"keccak256\":\"0xc35980f371cab5d9af3e1ead06f82b2afb705a8dbb2a5f53793f0179c485c274\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://dd7732d690c7959df567ee3e4863b0045583506fbae3c87b684b6173fd126968\",\"dweb:/ipfs/QmUbcUAqxKZTQS5ZwwPVnfNAtCmas4pPWQhRWXXwWQEeef\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol\":{\"keccak256\":\"0x8616968305b6127f4cb43209502e074c3964230a66c703e6b8623b03e5ec6442\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2b1f1163fee75613024b38c25e17649933919f4a47a5ba5e8c3ea046023eb1ad\",\"dweb:/ipfs/QmNWReZE8BQ82eXahdKjnNjQWHuH9L9wcTcnKgyV5ypKCa\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/RelayHubValidator.sol\":{\"keccak256\":\"0xd510edd4bb9a11beae2e610f850ca7dcc5a8947c73080bf04c41e2c3c28c87af\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://548657a37cbcfacfc7a425ac61f126831cac3d4a8228e698ab57b38db2cbd29d\",\"dweb:/ipfs/QmbT6SADeNBsXiaV57rjL4cTH2DT6SMsSWyz6CwXs2KcZk\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"hardhat/console.sol\":{\"keccak256\":\"0x72b6a1d297cd3b033d7c2e4a7e7864934bb767db6453623f1c3082c6534547f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8cb8681076e765c214e0d51cac989325f6b98e315eaae06ee0cbd5a9f084763\",\"dweb:/ipfs/QmNWGHi4zmjxQTYN3NMGnJd49jBT5dE4bxTdWEaDuJrC6N\"]}},\"version\":1}",
    "bytecode": "0x610120604052600019600c553480156200001857600080fd5b50604051620056b9380380620056b98339810160408190526200003b9162000331565b62000046336200008b565b43610100526001600160601b0319606086811b821660805285811b821660a05284811b821660c05283901b1660e0526200008081620000db565b505050505062000493565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000e562000284565b60648160c0015160ff1610620001355760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b60448201526064015b60405180910390fd5b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b02600160a81b600160f81b031960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e7247916200027991815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c083015260a81c6001600160501b031660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b6000546001600160a01b03163314620002e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200012c565b565b8051620002ef816200047a565b919050565b805161ffff81168114620002ef57600080fd5b80516001600160501b0381168114620002ef57600080fd5b805160ff81168114620002ef57600080fd5b60008060008060008587036101a08112156200034c57600080fd5b865162000359816200047a565b60208801519096506200036c816200047a565b60408801519095506200037f816200047a565b606088015190945062000392816200047a565b9250610120607f198201811315620003a957600080fd5b620003b362000442565b91506080880151825260a0880151602083015260c0880151604083015260e08801516060830152610100808901516080840152620003f3828a01620002e2565b60a0840152620004076101408a016200031f565b60c08401526200041b6101608a0162000307565b60e08401526200042f6101808a01620002f4565b9083015250949793965091945092919050565b60405161012081016001600160401b03811182821017156200047457634e487b7160e01b600052604160045260246000fd5b60405290565b6001600160a01b03811681146200049057600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c610100516151966200052360003960006102420152600081816102eb015261081a0152600081816106f3015261108e0152600081816104250152612b8b0152600081816105c80152818161078b0152818161090c015281816127660152818161290101528181612c690152612d6401526151966000f3fe6080604052600436106101f95760003560e01c80638e53548b1161010d578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e1214610664578063ebcd31ac14610684578063f2fde38b146106a4578063f3fef3a3146106c4578063f7908a74146106e457600080fd5b8063ca64f9e7146105b9578063d26152f9146105ec578063d904c7321461060c578063ddf737891461062e57600080fd5b8063af595dfc116100dc578063af595dfc14610528578063be7c76ad14610548578063c2da078614610581578063c7178230146105a157600080fd5b80638e53548b146104a75780639bcde3f3146104c7578063a6e61b60146104e7578063aa67c9191461051557600080fd5b80636bd50cef1161019057806372c1ab0c1161015f57806372c1ab0c146103f657806375dc7b4e146104165780638a09fb56146104495780638ac3b845146104695780638da5cb5b1461048957600080fd5b80636bd50cef146103595780636ca862e21461037b57806370a08231146103ab578063715018a6146103e157600080fd5b806345bdade7116101cc57806345bdade7146102a55780634f7de031146102ba57806351d85156146102dc57806359c4afc01461032357600080fd5b806301ffc9a7146101fe57806320ffd56d1461023357806339622167146102705780633c16e59a14610290575b600080fd5b34801561020a57600080fd5b5061021e610219366004614013565b610717565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161022a565b34801561027c57600080fd5b5061021e61028b366004613d5d565b610769565b34801561029c57600080fd5b50600c54610262565b3480156102b157600080fd5b50610262610807565b3480156102c657600080fd5b506102da6102d5366004613d5d565b61080f565b005b3480156102e857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161022a565b34801561032f57600080fd5b5061026261033e366004613d5d565b6001600160a01b03166000908152600a602052604090205490565b34801561036557600080fd5b5061036e61096b565b60405161022a9190614a3f565b34801561038757600080fd5b5061039b6103963660046141ad565b610a4c565b60405161022a949392919061483e565b3480156103b757600080fd5b506102626103c6366004613d5d565b6001600160a01b03166000908152600b602052604090205490565b3480156103ed57600080fd5b506102da6118cf565b34801561040257600080fd5b506102da610411366004613e53565b6118e3565b34801561042257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b34801561045557600080fd5b506102da610464366004613f1b565b611ba4565b34801561047557600080fd5b506102626104843660046143f8565b611cfb565b34801561049557600080fd5b506000546001600160a01b031661030b565b3480156104b357600080fd5b506102626104c2366004614411565b611d30565b3480156104d357600080fd5b506102da6104e23660046142d9565b611dc6565b3480156104f357600080fd5b506105076105023660046140c8565b611f6c565b60405161022a9291906148b2565b6102da610523366004613d5d565b6123f8565b34801561053457600080fd5b506102da6105433660046143f8565b6124d9565b34801561055457600080fd5b5061030b610563366004613d5d565b6001600160a01b039081166000908152600960205260409020541690565b34801561058d57600080fd5b506102da61059c366004613ddf565b61255c565b3480156105ad57600080fd5b50600c5442101561021e565b3480156105c557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b3480156105f857600080fd5b506102da610607366004613d5d565b61273f565b34801561061857600080fd5b506106216128bd565b60405161022a919061486c565b34801561063a57600080fd5b50610262610649366004613d5d565b6001600160a01b031660009081526008602052604090205490565b34801561067057600080fd5b506102da61067f366004613d5d565b6128dd565b34801561069057600080fd5b506102da61069f366004613da6565b612b80565b3480156106b057600080fd5b506102da6106bf366004613d5d565b612dc8565b3480156106d057600080fd5b506102da6106df366004613d7a565b612e41565b3480156106f057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b60006001600160e01b0319821663e9fb30f760e01b148061074857506001600160e01b03198216630704183b60e11b145b8061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b1580156107cf57600080fd5b505afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107639190613fb5565b60005a905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088c5760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b610895816128dd565b6001600160a01b0381166000908152600a60205260409020546108ed5760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b6044820152606401610883565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505050565b6109d3604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610a5b613ae8565b610a63610807565b6040820152610a738a8a8a612ee4565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610ab690612f49565b610ac4816101e00151612f8c565b610afd60405180606001604052806023815260200161513e60239139610aea8c80614b56565b610af8906020810190613d5d565b612fd1565b610b34604051806060016040528060218152602001614eb060219139610b238c80614b56565b610af8906040810190602001613d5d565b610b63604051806060016040528060248152602001614fb960249139610b5a8c80614b56565b6040013561301a565b610b92604051806060016040528060228152602001614ed160229139610b898c80614b56565b6060013561301a565b610bc1604051806060016040528060248152602001614e8c60249139610bb88c80614b56565b6080013561301a565b610bf06040518060600160405280602d8152602001614ddc602d9139610be78c80614b56565b60c0013561301a565b610c1f6040518060600160405280602d8152602001614f2e602d9139610c1960208d018d614b6c565b3561301a565b610c51604051806060016040528060358152602001614f8460359139610c4860208d018d614b6c565b6020013561301a565b610c7a6040518060600160405280603b8152602001614ef3603b9139610b5a60208d018d614b6c565b610cb46040518060600160405280602c8152602001614db0602c9139610ca360208d018d614b6c565b610af8906080810190606001613d5d565b610cee6040518060600160405280602a8152602001615114602a9139610cdd60208d018d614b6c565b610af89060a0810190608001613d5d565b610d286040518060600160405280602a81526020016150ea602a9139610d1760208d018d614b6c565b610af89060c081019060a001613d5d565b610d5a604051806060016040528060298152602001614f5b60299139610d5160208d018d614b6c565b60e0013561301a565b610d986040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250612f49565b610dd78d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f4992505050565b610e0b6040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250612f49565b610e4a89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610e816040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250612f49565b610ec087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610ee16040518060600160405280602381526020016150c760239139612f49565b610f36610eee8b80614b56565b610efc9060a0810190614b10565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610f576040518060600160405280602e8152602001614fdd602e9139612f49565b610f75610f6760208c018c614b6c565b610efc9060c0810190614b10565b610fb46040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c61301a565b600c544210610ff65760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b6044820152606401610883565b60046110028b80614b56565b6110109060a0810190614b10565b9050101561101f576000611074565b61107461102c8b80614b56565b61103a9060a0810190614b10565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506130a2915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906110bb57503215155b156111cf578761110d5760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f722062616420676174657761796044820152606401610883565b33321461115c5760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f4100000000000000006044820152606401610883565b61116960208b018b614b6c565b61117a906080810190606001613d5d565b6001600160a01b0316336001600160a01b0316146111cf5760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b6044820152606401610883565b321561126d57600960006111e660208d018d614b6c565b6111f7906080810190606001613d5d565b6001600160a01b039081168252602082019290925260400160002054166101c0820181905261125f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b61126d816101c001516128dd565b61127c8b8b8360400151613112565b61010083015260a08201526112968d8d8c8c8c8c8c61339c565b60025460405a6112a790603f614cc5565b6112b19190614ca3565b6112bb9190614ce4565b6101208201526112c9610807565b61014082015260035460045461012083015160408401516112ed60208f018f614b6c565b604001356112fb9190614c8b565b6113059190614c8b565b61130f9190614c8b565b6113199190614c8b565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a0015161134f610807565b8c610200015161135f9190614ce4565b8c610100015160405160240161137e9a999897969594939291906148d2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113bc9190614664565b60006040518083038160008787f1925050503d80600081146113fa576040519150601f19603f3d011682016040523d82523d6000602084013e6113ff565b606091505b5061022083015215158152611412610807565b8161014001516114229190614ce4565b60e082015261022081015180516114419160209181018201910161408a565b8260c0018360800182905282600681111561145e5761145e614d58565b600681111561146f5761146f614d58565b90525050608081015151156114c0577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516114b79291906148b2565b60405180910390a15b80516116225760028160c0015160068111156114de576114de614d58565b148061154d57506114f260208b018b614b6c565b60a082015151611506916040013590614c8b565b8160e001511115801561154d575060038160c00151600681111561152c5761152c614d58565b148061154d575060048160c00151600681111561154b5761154b614d58565b145b15611622576101e081015161156560208c018c614b6c565b6115769060a0810190608001613d5d565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846115b48e80614b56565b6115c2906020810190613d5d565b6115cc8f80614b56565b6115dd906040810190602001613d5d565b3387602001518860e0015189608001516040516115ff96959493929190614769565b60405180910390a46000808260c0015183608001519450945094509450506118c0565b60045461162d610807565b826040015161163c9190614ce4565b61164960208d018d614b6c565b604001356116579190614c8b565b6116619190614c8b565b610160820181905261167a906104c260208d018d614b6c565b935061168584611cfb565b61018082015283600b600061169d60208e018e614b6c565b6116ae9060a0810190608001613d5d565b6001600160a01b03166001600160a01b03168152602001908152602001600020546116d99190614ce4565b600b60006116ea60208e018e614b6c565b6116fb9060a0810190608001613d5d565b6001600160a01b031681526020810191909152604001600020556101808101516117259085614ce4565b6101c08201516001600160a01b03166000908152600b602052604090205461174d9190614c8b565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156117bd576101808101516006546001600160a01b03166000908152600b60205260409020546117a19190614c8b565b6006546001600160a01b03166000908152600b60205260409020555b60006117c98b80614b56565b6117d7906020810190613d5d565b905060006117e58c80614b56565b6117f6906040810190602001613d5d565b9050600061180760208e018e614b6c565b6118189060a0810190608001613d5d565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f60405161187a9695949392919061471b565b60405180910390a4505050326118a35760c08101516080909101516001955090925090506118c0565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6118d7613476565b6118e160006134d0565b565b3360005b8251811015611b9e576119886040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205486848151811061196157611961614d6e565b602002602001015186858151811061197b5761197b614d6e565b6020026020010151613520565b6001600160a01b0382166000908152600b602052604090205483518490839081106119b5576119b5614d6e565b6020026020010151811015611a015760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610883565b838281518110611a1357611a13614d6e565b602002602001015181611a269190614ce4565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611a5657611a56614d6e565b60200260200101516001600160a01b0316858481518110611a7957611a79614d6e565b602002602001015160405160006040518083038185875af1925050503d8060008114611ac1576040519150601f19603f3d011682016040523d82523d6000602084013e611ac6565b606091505b5050905080611b0a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610883565b858381518110611b1c57611b1c614d6e565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611b6a57611b6a614d6e565b6020026020010151604051611b8191815260200190565b60405180910390a350508080611b9690614d27565b9150506118e7565b50505050565b611bac613476565b8051825114611bfd5760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e67746800006044820152606401610883565b60005b8251811015611cf657818181518110611c1b57611c1b614d6e565b602002602001015160086000858481518110611c3957611c39614d6e565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611c9857611c98614d6e565b6020026020010151838381518110611cb257611cb2614d6e565b6020026020010151604051611cdc9291906001600160a01b03929092168252602082015260400190565b60405180910390a180611cee81614d27565b915050611c00565b505050565b600654600090600160a01b900460ff16611d1757506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611d4857506000611d4b565b50485b6000611d678435611d623a81602089013587614c8b565b613569565b600754909150606490611d7e9061ffff1682614c65565b61ffff16611d8c8388614cc5565b611d969190614cc5565b611da09190614ca3565b600654611dbd9190600160a81b90046001600160501b0316614c8b565b95945050505050565b611dce613476565b60648160c0015160ff1610611e185760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b6044820152606401610883565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e724791611f6191815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b60006060611fc6604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b611fce610807565b81525a611fdb9086614ce4565b602082015233301461202f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c61794875620000000000006044820152606401610883565b600b600061204060208e018e614b6c565b6120519060a0810190608001613d5d565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b90612092908d908d908d908d908d908b90602401614ac1565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906120dc908e018e614b6c565b6120ed9060a0810190608001613d5d565b6001600160a01b031688602001358460e0015160405161210d9190614664565b60006040518083038160008787f1925050503d806000811461214b576040519150601f19603f3d011682016040523d82523d6000602084013e612150565b606091505b5090925090508161216f5761216481613581565b61216f60028261358d565b80806020019051810190612183919061403d565b8460c001856101000182151515158152508290525050505060006121ed8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d6135c6565b60a08501521515608084015290508061220f5761220f60038360a0015161358d565b816101000151801561222357508160800151155b156122375761223760048360a0015161358d565b506376fa01c360e01b8160c001518260800151612252610807565b845161225e9190614ce4565b846020015161226d9190614c8b565b8e806020019061227d9190614b6c565b604051602401612290949392919061487f565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906122d9908e018e614b6c565b6122ea9060a0810190608001613d5d565b6001600160a01b031688604001358460e0015160405161230a9190614664565b60006040518083038160008787f1925050503d8060008114612348576040519150601f19603f3d011682016040523d82523d6000602084013e61234d565b606091505b5091509150816123625761236260058261358d565b50506040810151600b600061237a60208f018f614b6c565b61238b9060a0810190608001613d5d565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156123cc576123cc60066040518060200160405280600081525061358d565b80608001516123dc5760016123df565b60005b8160a0015192509250509a509a98505050505050505050565b6124126001600160a01b0382166370d596f560e11b6137ac565b61245e5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c696420495061796d61737465726044820152606401610883565b6001600160a01b0381166000908152600b60205260409020543490612484908290614c8b565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b6124e1613476565b600c5442106125275760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b6044820152606401610883565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001611f61565b336000818152600a6020526040812054612577908490614c8b565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156125da5760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b6044820152606401610883565b6125e3826128dd565b60005b838110156126f357600060098187878581811061260557612605614d6e565b905060200201602081019061261a9190613d5d565b6001600160a01b03908116825260208201929092526040016000205416146126845760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e61676572000000000000006044820152606401610883565b826009600087878581811061269b5761269b614d6e565b90506020020160208101906126b09190613d5d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692909116919091179055806126eb81614d27565b9150506125e6565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a28858584604051612731939291906147e8565b60405180910390a250505050565b612747613476565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b1580156127a857600080fd5b505afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190613fb5565b61282c5760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c65207965746044820152606401610883565b6001600160a01b038082166000908152600b60205260408082208054908390556006549093168252902054612862908290614c8b565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b6060604051806060016040528060228152602001614e0960229139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297c919061436c565b60a0820180516001600160a01b03908116600090815260086020526040902054915193955091935091166129ed5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b8251811115612a3e5760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c000000000000006044820152606401610883565b80612a8b5760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e006044820152606401610883565b60055460208401511015612ae15760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c0000000000006044820152606401610883565b604083015115612b335760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e00000000000000006044820152606401610883565b81611b9e5760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d6044820152606401610883565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612be85760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b6044820152606401610883565b6001600160a01b038083166000908152600960205260409020541680612c475760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce6919061436c565b508051909150612d335760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612daa57600080fd5b505af1158015612dbe573d6000803e3d6000fd5b5050505050505050565b612dd0613476565b6001600160a01b038116612e355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610883565b612e3e816134d0565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612e9a57612e9a614d6e565b6020026020010181815250508381600081518110612eba57612eba614d6e565b60200260200101906001600160a01b031690816001600160a01b031681525050611b9e81836118e3565b60006001600160e01b03612ef88580614b56565b612f06906020810190613d5d565b612f108680614b56565b608001358585604051602001612f2994939291906147c0565b604051602081830303815290604052805190602001201690509392505050565b612e3e81604051602401612f5d919061486c565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526137c8565b612e3e81604051602401612fa291815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b1790526137c8565b6130168282604051602401612fe7929190614968565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526137c8565b5050565b6130168282604051602401613030929190614992565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526137c8565b612e3e81604051602401613073919061486c565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526137c8565b60006130af826004614c8b565b835110156130ff5760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f72740000000000006044820152606401610883565b5001602001516001600160e01b03191690565b61313d6040518060800160405280600081526020016000815260200160008152602001600081525090565b600061314c6020850185614b6c565b61315d9060a0810190608001613d5d565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b15801561319857600080fd5b5086fa1580156131ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131d19190614274565b60608101519092503611156132285760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d69740000000000000000006044820152606401610883565b81518510156132795760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f20686967680000000000006044820152606401610883565b6020820151825110156132ce5760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f77000000000000006044820152606401610883565b826132dc6020860186614b6c565b604001356132ea9190614c8b565b905060006132ff826104c26020880188614b6c565b9050600b60006133126020880188614b6c565b6133239060a0810190608001613d5d565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156133935760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f77000000000000006044820152606401610883565b50935093915050565b60006133c16133ae6020880188614b6c565b6133bc9060c0810190614b10565b6137e9565b6133dc6133ce8880614b56565b6133bc9060a0810190614b10565b6133e685856137e9565b6133f088886137e9565b6133fa8c8c6137e9565b613406906102c4614c8b565b6134109190614c8b565b61341a9190614c8b565b6134249190614c8b565b61342e9190614c8b565b9050368114612dbe5760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b6044820152606401610883565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610883565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b9e8484848460405160240161353a94939291906149b4565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b1790526137c8565b6000818310613578578161357a565b825b9392505050565b612e3e8161040061380f565b600082826040516020016135a29291906148b2565b60405160208183030381529060405290506135bc81613581565b8051602082018181fd5b600080606060006135d68761381c565b90506000613601896135eb60208b018b614b6c565b6135fc9060c081019060a001613d5d565b61385b565b90506136106020890189614b6c565b6136219060c081019060a001613d5d565b6001600160a01b031663e024dc7f60e01b61363c8a80614b56565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614e2b606191396040518060e0016040528060bc815260200161500b60bc91396040516020016136a491906146df565b60408051601f19818403018152908290526136c3939291602001614680565b60405160208183030381529060405280519060200120868c8c6040516024016136f1969594939291906149ec565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161372f9190614664565b6000604051808303816000865af19150503d806000811461376c576040519150601f19603f3d011682016040523d82523d6000602084013e613771565b606091505b509095509250841561379757828060200190518101906137919190613fd0565b90945092505b6137a083613581565b50509450945094915050565b60006137b7836138ae565b801561357a575061357a83836138e1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60006137f8601f600019614ce4565b61380383601f614c8b565b61357a91166020614c8b565b8082511115613016579052565b606061383361382e6020840184614b6c565b61396a565b60405160200161384591815260200190565b6040516020818303038152906040529050919050565b600061357a6040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016138974690565b8152602001846001600160a01b0316815250613a68565b60006138c1826301ffc9a760e01b6138e1565b801561076357506138da826001600160e01b03196138e1565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613953575060208210155b801561395f5750600081115b979650505050505050565b60006040518060e0016040528060bc815260200161500b60bc913980516020918201209083359084013560408501356139a96080870160608801613d5d565b6139b960a0880160808901613d5d565b6139c960c0890160a08a01613d5d565b6139d660c08a018a614b10565b6040516139e4929190614654565b604051908190038120613a4b989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82600001518051906020012083602001518051906020012084604001518560600151604051602001613a4b9594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613b4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613bbf81614d9a565b919050565b600082601f830112613bd557600080fd5b81356020613bea613be583614bfd565b614bcd565b80838252828201915082860187848660051b8901011115613c0a57600080fd5b60005b85811015613c2957813584529284019290840190600101613c0d565b5090979650505050505050565b80518015158114613bbf57600080fd5b60008083601f840112613c5857600080fd5b5081356001600160401b03811115613c6f57600080fd5b602083019150836020828501011115613c8757600080fd5b9250929050565b600082601f830112613c9f57600080fd5b81516001600160401b03811115613cb857613cb8614d84565b613ccb601f8201601f1916602001614bcd565b818152846020838601011115613ce057600080fd5b613cf1826020830160208701614cfb565b949350505050565b600060808284031215613d0b57600080fd5b50919050565b600060408284031215613d0b57600080fd5b803561ffff81168114613bbf57600080fd5b803560ff81168114613bbf57600080fd5b80356001600160501b0381168114613bbf57600080fd5b600060208284031215613d6f57600080fd5b813561357a81614d9a565b60008060408385031215613d8d57600080fd5b8235613d9881614d9a565b946020939093013593505050565b60008060408385031215613db957600080fd5b8235613dc481614d9a565b91506020830135613dd481614d9a565b809150509250929050565b60008060208385031215613df257600080fd5b82356001600160401b0380821115613e0957600080fd5b818501915085601f830112613e1d57600080fd5b813581811115613e2c57600080fd5b8660208260051b8501011115613e4157600080fd5b60209290920196919550909350505050565b60008060408385031215613e6657600080fd5b82356001600160401b0380821115613e7d57600080fd5b818501915085601f830112613e9157600080fd5b81356020613ea1613be583614bfd565b8083825282820191508286018a848660051b8901011115613ec157600080fd5b600096505b84871015613eed578035613ed981614d9a565b835260019690960195918301918301613ec6565b5096505086013592505080821115613f0457600080fd5b50613f1185828601613bc4565b9150509250929050565b60008060408385031215613f2e57600080fd5b82356001600160401b0380821115613f4557600080fd5b818501915085601f830112613f5957600080fd5b81356020613f69613be583614bfd565b8083825282820191508286018a848660051b8901011115613f8957600080fd5b600096505b84871015613eed578035613fa181614d9a565b835260019690960195918301918301613f8e565b600060208284031215613fc757600080fd5b61357a82613c36565b60008060408385031215613fe357600080fd5b613fec83613c36565b915060208301516001600160401b0381111561400757600080fd5b613f1185828601613c8e565b60006020828403121561402557600080fd5b81356001600160e01b03198116811461357a57600080fd5b6000806040838503121561405057600080fd5b82516001600160401b0381111561406657600080fd5b61407285828601613c8e565b92505061408160208401613c36565b90509250929050565b6000806040838503121561409d57600080fd5b8251600781106140ac57600080fd5b60208401519092506001600160401b0381111561400757600080fd5b6000806000806000806000806000806101408b8d0312156140e857600080fd5b8a356001600160401b03808211156140ff57600080fd5b61410b8e838f01613c46565b909c509a5060208d013591508082111561412457600080fd5b6141308e838f01613d11565b995060408d013591508082111561414657600080fd5b6141528e838f01613c46565b909950975060608d013591508082111561416b57600080fd5b506141788d828e01613c46565b909650945061418c90508c60808d01613cf9565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b0312156141c957600080fd5b88356001600160401b03808211156141e057600080fd5b6141ec8c838d01613c46565b909a50985060208b0135975060408b013591508082111561420c57600080fd5b6142188c838d01613d11565b965060608b013591508082111561422e57600080fd5b61423a8c838d01613c46565b909650945060808b013591508082111561425357600080fd5b506142608b828c01613c46565b999c989b5096995094979396929594505050565b60006080828403121561428657600080fd5b604051608081018181106001600160401b03821117156142a8576142a8614d84565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012082840312156142ec57600080fd5b6142f4614b82565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261432c60a08401613bb4565b60a082015261433d60c08401613d35565b60c082015261434e60e08401613d46565b60e0820152610100614361818501613d23565b908201529392505050565b60008082840361010081121561438157600080fd5b60e081121561438f57600080fd5b50614398614bab565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a08401516143d281614d9a565b60a082015260c08401516143e581614d9a565b60c0820152915061408160e08401613c36565b60006020828403121561440a57600080fd5b5035919050565b6000806040838503121561442457600080fd5b8235915060208301356001600160401b0381111561444157600080fd5b83016101008186031215613dd457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614495816020860160208601614cfb565b601f01601f19169290920160200192915050565b600781106144c757634e487b7160e01b600052602160045260246000fd5b9052565b600081356144d881614d9a565b6001600160a01b0390811684526020830135906144f482614d9a565b16602084015260408281013590840152606080830135908401526080808301359084015261452560a0830183614c20565b60e060a086015261453a60e086018284614454565b91505060c083013560c08501528091505092915050565b6000610100823584526020830135602085015260408301356040850152606083013561457c81614d9a565b6001600160a01b03908116606086015260808401359061459b82614d9a565b16608085015260a08301356145af81614d9a565b6001600160a01b031660a08501526145ca60c0840184614c20565b8260c08701526145dd8387018284614454565b9250505060e083013560e08501528091505092915050565b6000813582360360de198101821261460c57600080fd5b6040855261461f604086018584016144cb565b9150602084013560fe198201811261463657600080fd5b858303602087015261464a83868301614551565b9695505050505050565b8183823760009101908152919050565b60008251614676818460208701614cfb565b9190910192915050565b60008451614692818460208901614cfb565b600560fb1b90830190815284516146b0816001840160208901614cfb565b600b60fa1b6001929091019182015283516146d2816002840160208801614cfb565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b81526000825161470e816014850160208701614cfb565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161475860808301856144a9565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906147b49083018461447d565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061464a606083018486614454565b6040808252810183905260008460608301825b8681101561482b57823561480e81614d9a565b6001600160a01b03168252602092830192909101906001016147fb565b5060209390930193909352509392505050565b841515815283602082015261485660408201846144a9565b60806060820152600061464a608083018461447d565b60208152600061357a602083018461447d565b608081526000614892608083018761447d565b8515156020840152846040840152828103606084015261395f8185614551565b6148bc81846144a9565b604060208201526000613cf1604083018461447d565b60006101408083526148e78184018d8f614454565b905082810360208401526148fb818c6145f5565b90508281036040840152614910818a8c614454565b9050828103606084015261492581888a614454565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b60408152600061497b604083018561447d565b905060018060a01b03831660208301529392505050565b6040815260006149a5604083018561447d565b90508260208301529392505050565b6080815260006149c7608083018761447d565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a0815260006149ff60a08301896144cb565b8760208401528660408401528281036060840152614a1d818761447d565b90508281036080840152614a32818587614454565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e0830151614aad60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b608081526000614ad460808301896145f5565b8281036020840152614ae781888a614454565b90508281036040840152614afc818688614454565b915050826060830152979650505050505050565b6000808335601e19843603018112614b2757600080fd5b8301803591506001600160401b03821115614b4157600080fd5b602001915036819003821315613c8757600080fd5b6000823560de1983360301811261467657600080fd5b6000823560fe1983360301811261467657600080fd5b60405161012081016001600160401b0381118282101715614ba557614ba5614d84565b60405290565b60405160e081016001600160401b0381118282101715614ba557614ba5614d84565b604051601f8201601f191681016001600160401b0381118282101715614bf557614bf5614d84565b604052919050565b60006001600160401b03821115614c1657614c16614d84565b5060051b60200190565b6000808335601e19843603018112614c3757600080fd5b83016020810192503590506001600160401b03811115614c5657600080fd5b803603831315613c8757600080fd5b600061ffff808316818516808303821115614c8257614c82614d42565b01949350505050565b60008219821115614c9e57614c9e614d42565b500190565b600082614cc057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614cdf57614cdf614d42565b500290565b600082821015614cf657614cf6614d42565b500390565b60005b83811015614d16578181015183820152602001614cfe565b83811115611b9e5750506000910152565b6000600019821415614d3b57614d3b614d42565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e3e57600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c756572656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da2646970667358221220ac6b61eaedbd2c90eaaec1317de16a2a2596c217c34a536c6c1fe93f0481e6f164736f6c63430008070033",
    "deployedBytecode": "0x6080604052600436106101f95760003560e01c80638e53548b1161010d578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e1214610664578063ebcd31ac14610684578063f2fde38b146106a4578063f3fef3a3146106c4578063f7908a74146106e457600080fd5b8063ca64f9e7146105b9578063d26152f9146105ec578063d904c7321461060c578063ddf737891461062e57600080fd5b8063af595dfc116100dc578063af595dfc14610528578063be7c76ad14610548578063c2da078614610581578063c7178230146105a157600080fd5b80638e53548b146104a75780639bcde3f3146104c7578063a6e61b60146104e7578063aa67c9191461051557600080fd5b80636bd50cef1161019057806372c1ab0c1161015f57806372c1ab0c146103f657806375dc7b4e146104165780638a09fb56146104495780638ac3b845146104695780638da5cb5b1461048957600080fd5b80636bd50cef146103595780636ca862e21461037b57806370a08231146103ab578063715018a6146103e157600080fd5b806345bdade7116101cc57806345bdade7146102a55780634f7de031146102ba57806351d85156146102dc57806359c4afc01461032357600080fd5b806301ffc9a7146101fe57806320ffd56d1461023357806339622167146102705780633c16e59a14610290575b600080fd5b34801561020a57600080fd5b5061021e610219366004614013565b610717565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161022a565b34801561027c57600080fd5b5061021e61028b366004613d5d565b610769565b34801561029c57600080fd5b50600c54610262565b3480156102b157600080fd5b50610262610807565b3480156102c657600080fd5b506102da6102d5366004613d5d565b61080f565b005b3480156102e857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161022a565b34801561032f57600080fd5b5061026261033e366004613d5d565b6001600160a01b03166000908152600a602052604090205490565b34801561036557600080fd5b5061036e61096b565b60405161022a9190614a3f565b34801561038757600080fd5b5061039b6103963660046141ad565b610a4c565b60405161022a949392919061483e565b3480156103b757600080fd5b506102626103c6366004613d5d565b6001600160a01b03166000908152600b602052604090205490565b3480156103ed57600080fd5b506102da6118cf565b34801561040257600080fd5b506102da610411366004613e53565b6118e3565b34801561042257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b34801561045557600080fd5b506102da610464366004613f1b565b611ba4565b34801561047557600080fd5b506102626104843660046143f8565b611cfb565b34801561049557600080fd5b506000546001600160a01b031661030b565b3480156104b357600080fd5b506102626104c2366004614411565b611d30565b3480156104d357600080fd5b506102da6104e23660046142d9565b611dc6565b3480156104f357600080fd5b506105076105023660046140c8565b611f6c565b60405161022a9291906148b2565b6102da610523366004613d5d565b6123f8565b34801561053457600080fd5b506102da6105433660046143f8565b6124d9565b34801561055457600080fd5b5061030b610563366004613d5d565b6001600160a01b039081166000908152600960205260409020541690565b34801561058d57600080fd5b506102da61059c366004613ddf565b61255c565b3480156105ad57600080fd5b50600c5442101561021e565b3480156105c557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b3480156105f857600080fd5b506102da610607366004613d5d565b61273f565b34801561061857600080fd5b506106216128bd565b60405161022a919061486c565b34801561063a57600080fd5b50610262610649366004613d5d565b6001600160a01b031660009081526008602052604090205490565b34801561067057600080fd5b506102da61067f366004613d5d565b6128dd565b34801561069057600080fd5b506102da61069f366004613da6565b612b80565b3480156106b057600080fd5b506102da6106bf366004613d5d565b612dc8565b3480156106d057600080fd5b506102da6106df366004613d7a565b612e41565b3480156106f057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030b565b60006001600160e01b0319821663e9fb30f760e01b148061074857506001600160e01b03198216630704183b60e11b145b8061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b1580156107cf57600080fd5b505afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107639190613fb5565b60005a905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088c5760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b610895816128dd565b6001600160a01b0381166000908152600a60205260409020546108ed5760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b6044820152606401610883565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505050565b6109d3604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610a5b613ae8565b610a63610807565b6040820152610a738a8a8a612ee4565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610ab690612f49565b610ac4816101e00151612f8c565b610afd60405180606001604052806023815260200161513e60239139610aea8c80614b56565b610af8906020810190613d5d565b612fd1565b610b34604051806060016040528060218152602001614eb060219139610b238c80614b56565b610af8906040810190602001613d5d565b610b63604051806060016040528060248152602001614fb960249139610b5a8c80614b56565b6040013561301a565b610b92604051806060016040528060228152602001614ed160229139610b898c80614b56565b6060013561301a565b610bc1604051806060016040528060248152602001614e8c60249139610bb88c80614b56565b6080013561301a565b610bf06040518060600160405280602d8152602001614ddc602d9139610be78c80614b56565b60c0013561301a565b610c1f6040518060600160405280602d8152602001614f2e602d9139610c1960208d018d614b6c565b3561301a565b610c51604051806060016040528060358152602001614f8460359139610c4860208d018d614b6c565b6020013561301a565b610c7a6040518060600160405280603b8152602001614ef3603b9139610b5a60208d018d614b6c565b610cb46040518060600160405280602c8152602001614db0602c9139610ca360208d018d614b6c565b610af8906080810190606001613d5d565b610cee6040518060600160405280602a8152602001615114602a9139610cdd60208d018d614b6c565b610af89060a0810190608001613d5d565b610d286040518060600160405280602a81526020016150ea602a9139610d1760208d018d614b6c565b610af89060c081019060a001613d5d565b610d5a604051806060016040528060298152602001614f5b60299139610d5160208d018d614b6c565b60e0013561301a565b610d986040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250612f49565b610dd78d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f4992505050565b610e0b6040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250612f49565b610e4a89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610e816040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250612f49565b610ec087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610ee16040518060600160405280602381526020016150c760239139612f49565b610f36610eee8b80614b56565b610efc9060a0810190614b10565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305f92505050565b610f576040518060600160405280602e8152602001614fdd602e9139612f49565b610f75610f6760208c018c614b6c565b610efc9060c0810190614b10565b610fb46040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c61301a565b600c544210610ff65760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b6044820152606401610883565b60046110028b80614b56565b6110109060a0810190614b10565b9050101561101f576000611074565b61107461102c8b80614b56565b61103a9060a0810190614b10565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506130a2915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906110bb57503215155b156111cf578761110d5760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f722062616420676174657761796044820152606401610883565b33321461115c5760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f4100000000000000006044820152606401610883565b61116960208b018b614b6c565b61117a906080810190606001613d5d565b6001600160a01b0316336001600160a01b0316146111cf5760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b6044820152606401610883565b321561126d57600960006111e660208d018d614b6c565b6111f7906080810190606001613d5d565b6001600160a01b039081168252602082019290925260400160002054166101c0820181905261125f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b61126d816101c001516128dd565b61127c8b8b8360400151613112565b61010083015260a08201526112968d8d8c8c8c8c8c61339c565b60025460405a6112a790603f614cc5565b6112b19190614ca3565b6112bb9190614ce4565b6101208201526112c9610807565b61014082015260035460045461012083015160408401516112ed60208f018f614b6c565b604001356112fb9190614c8b565b6113059190614c8b565b61130f9190614c8b565b6113199190614c8b565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a0015161134f610807565b8c610200015161135f9190614ce4565b8c610100015160405160240161137e9a999897969594939291906148d2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113bc9190614664565b60006040518083038160008787f1925050503d80600081146113fa576040519150601f19603f3d011682016040523d82523d6000602084013e6113ff565b606091505b5061022083015215158152611412610807565b8161014001516114229190614ce4565b60e082015261022081015180516114419160209181018201910161408a565b8260c0018360800182905282600681111561145e5761145e614d58565b600681111561146f5761146f614d58565b90525050608081015151156114c0577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516114b79291906148b2565b60405180910390a15b80516116225760028160c0015160068111156114de576114de614d58565b148061154d57506114f260208b018b614b6c565b60a082015151611506916040013590614c8b565b8160e001511115801561154d575060038160c00151600681111561152c5761152c614d58565b148061154d575060048160c00151600681111561154b5761154b614d58565b145b15611622576101e081015161156560208c018c614b6c565b6115769060a0810190608001613d5d565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846115b48e80614b56565b6115c2906020810190613d5d565b6115cc8f80614b56565b6115dd906040810190602001613d5d565b3387602001518860e0015189608001516040516115ff96959493929190614769565b60405180910390a46000808260c0015183608001519450945094509450506118c0565b60045461162d610807565b826040015161163c9190614ce4565b61164960208d018d614b6c565b604001356116579190614c8b565b6116619190614c8b565b610160820181905261167a906104c260208d018d614b6c565b935061168584611cfb565b61018082015283600b600061169d60208e018e614b6c565b6116ae9060a0810190608001613d5d565b6001600160a01b03166001600160a01b03168152602001908152602001600020546116d99190614ce4565b600b60006116ea60208e018e614b6c565b6116fb9060a0810190608001613d5d565b6001600160a01b031681526020810191909152604001600020556101808101516117259085614ce4565b6101c08201516001600160a01b03166000908152600b602052604090205461174d9190614c8b565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156117bd576101808101516006546001600160a01b03166000908152600b60205260409020546117a19190614c8b565b6006546001600160a01b03166000908152600b60205260409020555b60006117c98b80614b56565b6117d7906020810190613d5d565b905060006117e58c80614b56565b6117f6906040810190602001613d5d565b9050600061180760208e018e614b6c565b6118189060a0810190608001613d5d565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f60405161187a9695949392919061471b565b60405180910390a4505050326118a35760c08101516080909101516001955090925090506118c0565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6118d7613476565b6118e160006134d0565b565b3360005b8251811015611b9e576119886040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205486848151811061196157611961614d6e565b602002602001015186858151811061197b5761197b614d6e565b6020026020010151613520565b6001600160a01b0382166000908152600b602052604090205483518490839081106119b5576119b5614d6e565b6020026020010151811015611a015760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610883565b838281518110611a1357611a13614d6e565b602002602001015181611a269190614ce4565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611a5657611a56614d6e565b60200260200101516001600160a01b0316858481518110611a7957611a79614d6e565b602002602001015160405160006040518083038185875af1925050503d8060008114611ac1576040519150601f19603f3d011682016040523d82523d6000602084013e611ac6565b606091505b5050905080611b0a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610883565b858381518110611b1c57611b1c614d6e565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611b6a57611b6a614d6e565b6020026020010151604051611b8191815260200190565b60405180910390a350508080611b9690614d27565b9150506118e7565b50505050565b611bac613476565b8051825114611bfd5760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e67746800006044820152606401610883565b60005b8251811015611cf657818181518110611c1b57611c1b614d6e565b602002602001015160086000858481518110611c3957611c39614d6e565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611c9857611c98614d6e565b6020026020010151838381518110611cb257611cb2614d6e565b6020026020010151604051611cdc9291906001600160a01b03929092168252602082015260400190565b60405180910390a180611cee81614d27565b915050611c00565b505050565b600654600090600160a01b900460ff16611d1757506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611d4857506000611d4b565b50485b6000611d678435611d623a81602089013587614c8b565b613569565b600754909150606490611d7e9061ffff1682614c65565b61ffff16611d8c8388614cc5565b611d969190614cc5565b611da09190614ca3565b600654611dbd9190600160a81b90046001600160501b0316614c8b565b95945050505050565b611dce613476565b60648160c0015160ff1610611e185760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b6044820152606401610883565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e724791611f6191815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b60006060611fc6604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b611fce610807565b81525a611fdb9086614ce4565b602082015233301461202f5760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c61794875620000000000006044820152606401610883565b600b600061204060208e018e614b6c565b6120519060a0810190608001613d5d565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b90612092908d908d908d908d908d908b90602401614ac1565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906120dc908e018e614b6c565b6120ed9060a0810190608001613d5d565b6001600160a01b031688602001358460e0015160405161210d9190614664565b60006040518083038160008787f1925050503d806000811461214b576040519150601f19603f3d011682016040523d82523d6000602084013e612150565b606091505b5090925090508161216f5761216481613581565b61216f60028261358d565b80806020019051810190612183919061403d565b8460c001856101000182151515158152508290525050505060006121ed8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d6135c6565b60a08501521515608084015290508061220f5761220f60038360a0015161358d565b816101000151801561222357508160800151155b156122375761223760048360a0015161358d565b506376fa01c360e01b8160c001518260800151612252610807565b845161225e9190614ce4565b846020015161226d9190614c8b565b8e806020019061227d9190614b6c565b604051602401612290949392919061487f565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906122d9908e018e614b6c565b6122ea9060a0810190608001613d5d565b6001600160a01b031688604001358460e0015160405161230a9190614664565b60006040518083038160008787f1925050503d8060008114612348576040519150601f19603f3d011682016040523d82523d6000602084013e61234d565b606091505b5091509150816123625761236260058261358d565b50506040810151600b600061237a60208f018f614b6c565b61238b9060a0810190608001613d5d565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156123cc576123cc60066040518060200160405280600081525061358d565b80608001516123dc5760016123df565b60005b8160a0015192509250509a509a98505050505050505050565b6124126001600160a01b0382166370d596f560e11b6137ac565b61245e5760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c696420495061796d61737465726044820152606401610883565b6001600160a01b0381166000908152600b60205260409020543490612484908290614c8b565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b6124e1613476565b600c5442106125275760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b6044820152606401610883565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001611f61565b336000818152600a6020526040812054612577908490614c8b565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156125da5760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b6044820152606401610883565b6125e3826128dd565b60005b838110156126f357600060098187878581811061260557612605614d6e565b905060200201602081019061261a9190613d5d565b6001600160a01b03908116825260208201929092526040016000205416146126845760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e61676572000000000000006044820152606401610883565b826009600087878581811061269b5761269b614d6e565b90506020020160208101906126b09190613d5d565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692909116919091179055806126eb81614d27565b9150506125e6565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a28858584604051612731939291906147e8565b60405180910390a250505050565b612747613476565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b1580156127a857600080fd5b505afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190613fb5565b61282c5760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c65207965746044820152606401610883565b6001600160a01b038082166000908152600b60205260408082208054908390556006549093168252902054612862908290614c8b565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b6060604051806060016040528060228152602001614e0960229139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297c919061436c565b60a0820180516001600160a01b03908116600090815260086020526040902054915193955091935091166129ed5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b8251811115612a3e5760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c000000000000006044820152606401610883565b80612a8b5760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e006044820152606401610883565b60055460208401511015612ae15760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c0000000000006044820152606401610883565b604083015115612b335760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e00000000000000006044820152606401610883565b81611b9e5760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d6044820152606401610883565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612be85760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b6044820152606401610883565b6001600160a01b038083166000908152600960205260409020541680612c475760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b6044820152606401610883565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612cae57600080fd5b505afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce6919061436c565b508051909150612d335760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b6044820152606401610883565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612daa57600080fd5b505af1158015612dbe573d6000803e3d6000fd5b5050505050505050565b612dd0613476565b6001600160a01b038116612e355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610883565b612e3e816134d0565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612e9a57612e9a614d6e565b6020026020010181815250508381600081518110612eba57612eba614d6e565b60200260200101906001600160a01b031690816001600160a01b031681525050611b9e81836118e3565b60006001600160e01b03612ef88580614b56565b612f06906020810190613d5d565b612f108680614b56565b608001358585604051602001612f2994939291906147c0565b604051602081830303815290604052805190602001201690509392505050565b612e3e81604051602401612f5d919061486c565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526137c8565b612e3e81604051602401612fa291815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b1790526137c8565b6130168282604051602401612fe7929190614968565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526137c8565b5050565b6130168282604051602401613030929190614992565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526137c8565b612e3e81604051602401613073919061486c565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526137c8565b60006130af826004614c8b565b835110156130ff5760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f72740000000000006044820152606401610883565b5001602001516001600160e01b03191690565b61313d6040518060800160405280600081526020016000815260200160008152602001600081525090565b600061314c6020850185614b6c565b61315d9060a0810190608001613d5d565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b15801561319857600080fd5b5086fa1580156131ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131d19190614274565b60608101519092503611156132285760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d69740000000000000000006044820152606401610883565b81518510156132795760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f20686967680000000000006044820152606401610883565b6020820151825110156132ce5760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f77000000000000006044820152606401610883565b826132dc6020860186614b6c565b604001356132ea9190614c8b565b905060006132ff826104c26020880188614b6c565b9050600b60006133126020880188614b6c565b6133239060a0810190608001613d5d565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156133935760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f77000000000000006044820152606401610883565b50935093915050565b60006133c16133ae6020880188614b6c565b6133bc9060c0810190614b10565b6137e9565b6133dc6133ce8880614b56565b6133bc9060a0810190614b10565b6133e685856137e9565b6133f088886137e9565b6133fa8c8c6137e9565b613406906102c4614c8b565b6134109190614c8b565b61341a9190614c8b565b6134249190614c8b565b61342e9190614c8b565b9050368114612dbe5760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b6044820152606401610883565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610883565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b9e8484848460405160240161353a94939291906149b4565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b1790526137c8565b6000818310613578578161357a565b825b9392505050565b612e3e8161040061380f565b600082826040516020016135a29291906148b2565b60405160208183030381529060405290506135bc81613581565b8051602082018181fd5b600080606060006135d68761381c565b90506000613601896135eb60208b018b614b6c565b6135fc9060c081019060a001613d5d565b61385b565b90506136106020890189614b6c565b6136219060c081019060a001613d5d565b6001600160a01b031663e024dc7f60e01b61363c8a80614b56565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614e2b606191396040518060e0016040528060bc815260200161500b60bc91396040516020016136a491906146df565b60408051601f19818403018152908290526136c3939291602001614680565b60405160208183030381529060405280519060200120868c8c6040516024016136f1969594939291906149ec565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161372f9190614664565b6000604051808303816000865af19150503d806000811461376c576040519150601f19603f3d011682016040523d82523d6000602084013e613771565b606091505b509095509250841561379757828060200190518101906137919190613fd0565b90945092505b6137a083613581565b50509450945094915050565b60006137b7836138ae565b801561357a575061357a83836138e1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b60006137f8601f600019614ce4565b61380383601f614c8b565b61357a91166020614c8b565b8082511115613016579052565b606061383361382e6020840184614b6c565b61396a565b60405160200161384591815260200190565b6040516020818303038152906040529050919050565b600061357a6040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016138974690565b8152602001846001600160a01b0316815250613a68565b60006138c1826301ffc9a760e01b6138e1565b801561076357506138da826001600160e01b03196138e1565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613953575060208210155b801561395f5750600081115b979650505050505050565b60006040518060e0016040528060bc815260200161500b60bc913980516020918201209083359084013560408501356139a96080870160608801613d5d565b6139b960a0880160808901613d5d565b6139c960c0890160a08a01613d5d565b6139d660c08a018a614b10565b6040516139e4929190614654565b604051908190038120613a4b989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82600001518051906020012083602001518051906020012084604001518560600151604051602001613a4b9594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613b4e6040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613bbf81614d9a565b919050565b600082601f830112613bd557600080fd5b81356020613bea613be583614bfd565b614bcd565b80838252828201915082860187848660051b8901011115613c0a57600080fd5b60005b85811015613c2957813584529284019290840190600101613c0d565b5090979650505050505050565b80518015158114613bbf57600080fd5b60008083601f840112613c5857600080fd5b5081356001600160401b03811115613c6f57600080fd5b602083019150836020828501011115613c8757600080fd5b9250929050565b600082601f830112613c9f57600080fd5b81516001600160401b03811115613cb857613cb8614d84565b613ccb601f8201601f1916602001614bcd565b818152846020838601011115613ce057600080fd5b613cf1826020830160208701614cfb565b949350505050565b600060808284031215613d0b57600080fd5b50919050565b600060408284031215613d0b57600080fd5b803561ffff81168114613bbf57600080fd5b803560ff81168114613bbf57600080fd5b80356001600160501b0381168114613bbf57600080fd5b600060208284031215613d6f57600080fd5b813561357a81614d9a565b60008060408385031215613d8d57600080fd5b8235613d9881614d9a565b946020939093013593505050565b60008060408385031215613db957600080fd5b8235613dc481614d9a565b91506020830135613dd481614d9a565b809150509250929050565b60008060208385031215613df257600080fd5b82356001600160401b0380821115613e0957600080fd5b818501915085601f830112613e1d57600080fd5b813581811115613e2c57600080fd5b8660208260051b8501011115613e4157600080fd5b60209290920196919550909350505050565b60008060408385031215613e6657600080fd5b82356001600160401b0380821115613e7d57600080fd5b818501915085601f830112613e9157600080fd5b81356020613ea1613be583614bfd565b8083825282820191508286018a848660051b8901011115613ec157600080fd5b600096505b84871015613eed578035613ed981614d9a565b835260019690960195918301918301613ec6565b5096505086013592505080821115613f0457600080fd5b50613f1185828601613bc4565b9150509250929050565b60008060408385031215613f2e57600080fd5b82356001600160401b0380821115613f4557600080fd5b818501915085601f830112613f5957600080fd5b81356020613f69613be583614bfd565b8083825282820191508286018a848660051b8901011115613f8957600080fd5b600096505b84871015613eed578035613fa181614d9a565b835260019690960195918301918301613f8e565b600060208284031215613fc757600080fd5b61357a82613c36565b60008060408385031215613fe357600080fd5b613fec83613c36565b915060208301516001600160401b0381111561400757600080fd5b613f1185828601613c8e565b60006020828403121561402557600080fd5b81356001600160e01b03198116811461357a57600080fd5b6000806040838503121561405057600080fd5b82516001600160401b0381111561406657600080fd5b61407285828601613c8e565b92505061408160208401613c36565b90509250929050565b6000806040838503121561409d57600080fd5b8251600781106140ac57600080fd5b60208401519092506001600160401b0381111561400757600080fd5b6000806000806000806000806000806101408b8d0312156140e857600080fd5b8a356001600160401b03808211156140ff57600080fd5b61410b8e838f01613c46565b909c509a5060208d013591508082111561412457600080fd5b6141308e838f01613d11565b995060408d013591508082111561414657600080fd5b6141528e838f01613c46565b909950975060608d013591508082111561416b57600080fd5b506141788d828e01613c46565b909650945061418c90508c60808d01613cf9565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b0312156141c957600080fd5b88356001600160401b03808211156141e057600080fd5b6141ec8c838d01613c46565b909a50985060208b0135975060408b013591508082111561420c57600080fd5b6142188c838d01613d11565b965060608b013591508082111561422e57600080fd5b61423a8c838d01613c46565b909650945060808b013591508082111561425357600080fd5b506142608b828c01613c46565b999c989b5096995094979396929594505050565b60006080828403121561428657600080fd5b604051608081018181106001600160401b03821117156142a8576142a8614d84565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012082840312156142ec57600080fd5b6142f4614b82565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261432c60a08401613bb4565b60a082015261433d60c08401613d35565b60c082015261434e60e08401613d46565b60e0820152610100614361818501613d23565b908201529392505050565b60008082840361010081121561438157600080fd5b60e081121561438f57600080fd5b50614398614bab565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a08401516143d281614d9a565b60a082015260c08401516143e581614d9a565b60c0820152915061408160e08401613c36565b60006020828403121561440a57600080fd5b5035919050565b6000806040838503121561442457600080fd5b8235915060208301356001600160401b0381111561444157600080fd5b83016101008186031215613dd457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614495816020860160208601614cfb565b601f01601f19169290920160200192915050565b600781106144c757634e487b7160e01b600052602160045260246000fd5b9052565b600081356144d881614d9a565b6001600160a01b0390811684526020830135906144f482614d9a565b16602084015260408281013590840152606080830135908401526080808301359084015261452560a0830183614c20565b60e060a086015261453a60e086018284614454565b91505060c083013560c08501528091505092915050565b6000610100823584526020830135602085015260408301356040850152606083013561457c81614d9a565b6001600160a01b03908116606086015260808401359061459b82614d9a565b16608085015260a08301356145af81614d9a565b6001600160a01b031660a08501526145ca60c0840184614c20565b8260c08701526145dd8387018284614454565b9250505060e083013560e08501528091505092915050565b6000813582360360de198101821261460c57600080fd5b6040855261461f604086018584016144cb565b9150602084013560fe198201811261463657600080fd5b858303602087015261464a83868301614551565b9695505050505050565b8183823760009101908152919050565b60008251614676818460208701614cfb565b9190910192915050565b60008451614692818460208901614cfb565b600560fb1b90830190815284516146b0816001840160208901614cfb565b600b60fa1b6001929091019182015283516146d2816002840160208801614cfb565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b81526000825161470e816014850160208701614cfb565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161475860808301856144a9565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906147b49083018461447d565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061464a606083018486614454565b6040808252810183905260008460608301825b8681101561482b57823561480e81614d9a565b6001600160a01b03168252602092830192909101906001016147fb565b5060209390930193909352509392505050565b841515815283602082015261485660408201846144a9565b60806060820152600061464a608083018461447d565b60208152600061357a602083018461447d565b608081526000614892608083018761447d565b8515156020840152846040840152828103606084015261395f8185614551565b6148bc81846144a9565b604060208201526000613cf1604083018461447d565b60006101408083526148e78184018d8f614454565b905082810360208401526148fb818c6145f5565b90508281036040840152614910818a8c614454565b9050828103606084015261492581888a614454565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b60408152600061497b604083018561447d565b905060018060a01b03831660208301529392505050565b6040815260006149a5604083018561447d565b90508260208301529392505050565b6080815260006149c7608083018761447d565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a0815260006149ff60a08301896144cb565b8760208401528660408401528281036060840152614a1d818761447d565b90508281036080840152614a32818587614454565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e0830151614aad60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b608081526000614ad460808301896145f5565b8281036020840152614ae781888a614454565b90508281036040840152614afc818688614454565b915050826060830152979650505050505050565b6000808335601e19843603018112614b2757600080fd5b8301803591506001600160401b03821115614b4157600080fd5b602001915036819003821315613c8757600080fd5b6000823560de1983360301811261467657600080fd5b6000823560fe1983360301811261467657600080fd5b60405161012081016001600160401b0381118282101715614ba557614ba5614d84565b60405290565b60405160e081016001600160401b0381118282101715614ba557614ba5614d84565b604051601f8201601f191681016001600160401b0381118282101715614bf557614bf5614d84565b604052919050565b60006001600160401b03821115614c1657614c16614d84565b5060051b60200190565b6000808335601e19843603018112614c3757600080fd5b83016020810192503590506001600160401b03811115614c5657600080fd5b803603831315613c8757600080fd5b600061ffff808316818516808303821115614c8257614c82614d42565b01949350505050565b60008219821115614c9e57614c9e614d42565b500190565b600082614cc057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614cdf57614cdf614d42565b500290565b600082821015614cf657614cf6614d42565b500390565b60005b83811015614d16578181015183820152602001614cfe565b83811115611b9e5750506000910152565b6000600019821415614d3b57614d3b614d42565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e3e57600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c756572656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da2646970667358221220ac6b61eaedbd2c90eaaec1317de16a2a2596c217c34a536c6c1fe93f0481e6f164736f6c63430008070033",
    "immutableReferences": {
        "1227": [
            {
                "length": 32,
                "start": 1480
            },
            {
                "length": 32,
                "start": 1931
            },
            {
                "length": 32,
                "start": 2316
            },
            {
                "length": 32,
                "start": 10086
            },
            {
                "length": 32,
                "start": 10497
            },
            {
                "length": 32,
                "start": 11369
            },
            {
                "length": 32,
                "start": 11620
            }
        ],
        "1229": [
            {
                "length": 32,
                "start": 1061
            },
            {
                "length": 32,
                "start": 11147
            }
        ],
        "1231": [
            {
                "length": 32,
                "start": 1779
            },
            {
                "length": 32,
                "start": 4238
            }
        ],
        "1233": [
            {
                "length": 32,
                "start": 747
            },
            {
                "length": 32,
                "start": 2074
            }
        ],
        "1352": [
            {
                "length": 32,
                "start": 578
            }
        ]
    },
    "sourceMap": "1224:25872:4:-:0;;;-1:-1:-1;;3123:52:4;;3182:417;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:47;719:10:55;936:18:47;:32::i;:::-;3395:12:4;3379:28;;-1:-1:-1;;;;;;3417:28:4;;;;;;;;3455:22;;;;;;;3487:28;;;;;;;3525:32;;;;;;3567:25;3584:7;3567:16;:25::i;:::-;3182:417;;;;;1224:25872;;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2009:216:4:-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;3178:2:63;2102:49:4::1;::::0;::::1;3160:21:63::0;3217:2;3197:18;;;3190:30;-1:-1:-1;;;3236:18:63;;;3229:46;3292:18;;2102:49:4::1;;;;;;;;;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;3547:13:63;;3529:32;;3617:4;3605:17;;3599:24;3592:4;3577:20;;3570:54;3680:4;3668:17;;3662:24;3655:4;3640:20;;3633:54;3743:4;3731:17;;3725:24;3718:4;3703:20;;3696:54;3806:4;3794:17;;3788:24;3781:4;3766:20;;3759:54;3857:4;3845:17;;3839:24;-1:-1:-1;;;;;3891:35:63;;3943:4;3928:20;;;2278:44;;;;4001:4;3979:20;;;;3975:31;4023:4;4008:20;;2579:29;4064:3;4060:19;-1:-1:-1;;;;;4056:44:63;4117:4;4102:20;;2481:43;4212:4;4200:17;;;4194:24;4757:6;4741:23;4275:6;4260:22;;2386:31;3516:3;3501:19;;3321:968;2192:26:4::1;;;;;;;;2009:216:::0;:::o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;2817:2:63;1414:68:47;;;2799:21:63;;;2836:18;;;2829:30;2895:34;2875:18;;;2868:62;2947:18;;1414:68:47;2615:356:63;1414:68:47;1359:130::o;14:138:63:-;93:13;;115:31;93:13;115:31;:::i;:::-;14:138;;;:::o;157:163::-;235:13;;288:6;277:18;;267:29;;257:57;;310:1;307;300:12;325:175;403:13;;-1:-1:-1;;;;;445:30:63;;435:41;;425:69;;490:1;487;480:12;505:160;582:13;;635:4;624:16;;614:27;;604:55;;655:1;652;645:12;670:1549;830:6;838;846;854;862;906:9;897:7;893:23;936:3;932:2;928:12;925:32;;;953:1;950;943:12;925:32;985:9;979:16;1004:31;1029:5;1004:31;:::i;:::-;1104:2;1089:18;;1083:25;1054:5;;-1:-1:-1;1117:33:63;1083:25;1117:33;:::i;:::-;1221:2;1206:18;;1200:25;1169:7;;-1:-1:-1;1234:33:63;1200:25;1234:33;:::i;:::-;1338:2;1323:18;;1317:25;1286:7;;-1:-1:-1;1351:33:63;1317:25;1351:33;:::i;:::-;1403:7;-1:-1:-1;1429:6:63;-1:-1:-1;;1451:17:63;;1447:26;-1:-1:-1;1444:46:63;;;1486:1;1483;1476:12;1444:46;1514:17;;:::i;:::-;1499:32;;1577:3;1566:9;1562:19;1556:26;1547:7;1540:43;1638:3;1627:9;1623:19;1617:26;1612:2;1603:7;1599:16;1592:52;1699:3;1688:9;1684:19;1678:26;1673:2;1664:7;1660:16;1653:52;1760:3;1749:9;1745:19;1739:26;1734:2;1725:7;1721:16;1714:52;1785:3;1844:2;1833:9;1829:18;1823:25;1817:3;1808:7;1804:17;1797:52;1884:49;1929:2;1918:9;1914:18;1884:49;:::i;:::-;1878:3;1869:7;1865:17;1858:76;1969:48;2012:3;2001:9;1997:19;1969:48;:::i;:::-;1963:3;1954:7;1950:17;1943:75;2053:49;2097:3;2086:9;2082:19;2053:49;:::i;:::-;2047:3;2038:7;2034:17;2027:76;2137:49;2181:3;2170:9;2166:19;2137:49;:::i;:::-;2119:16;;;2112:75;-1:-1:-1;670:1549:63;;;;-1:-1:-1;670:1549:63;;-1:-1:-1;670:1549:63;2123:7;670:1549;-1:-1:-1;670:1549:63:o;4294:347::-;4361:2;4355:9;4403:6;4391:19;;-1:-1:-1;;;;;4425:34:63;;4461:22;;;4422:62;4419:185;;;4526:10;4521:3;4517:20;4514:1;4507:31;4561:4;4558:1;4551:15;4589:4;4586:1;4579:15;4419:185;4620:2;4613:22;4294:347;:::o;4775:131::-;-1:-1:-1;;;;;4850:31:63;;4840:42;;4830:70;;4896:1;4893;4886:12;4830:70;4775:131;:::o;:::-;1224:25872:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "1224:25872:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:282;;;;;;;;;;-1:-1:-1;4995:282:4;;;;;:::i;:::-;;:::i;:::-;;;24389:14:63;;24382:22;24364:41;;24352:2;24337:18;4995:282:4;;;;;;;;3635:113;;;;;;;;;;-1:-1:-1;3728:13:4;3635:113;;;25052:25:63;;;25040:2;25025:18;3635:113:4;24906:177:63;26328:154:4;;;;;;;;;;-1:-1:-1;26328:154:4;;;;;:::i;:::-;;:::i;3784:110::-;;;;;;;;;;-1:-1:-1;3872:15:4;;3784:110;;26987:107;;;;;;;;;;;;;:::i;5313:337::-;;;;;;;;;;-1:-1:-1;5313:337:4;;;;;:::i;:::-;;:::i;:::-;;4350:108;;;;;;;;;;-1:-1:-1;4437:14:4;4350:108;;;-1:-1:-1;;;;;20963:32:63;;;20945:51;;20933:2;20918:18;4350:108:4;20799:203:63;4835:126:4;;;;;;;;;;-1:-1:-1;4835:126:4;;;;;:::i;:::-;-1:-1:-1;;;;;4934:20:4;4908:7;4934:20;;;:11;:20;;;;;;;4835:126;1862:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9838:8413::-;;;;;;;;;;-1:-1:-1;9838:8413:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6798:116::-;;;;;;;;;;-1:-1:-1;6798:116:4;;;;;:::i;:::-;-1:-1:-1;;;;;6891:16:4;6865:7;6891:16;;;:8;:16;;;;;;;6798:116;1831:101:47;;;;;;;;;;;;;:::i;7302:658:4:-;;;;;;;;;;-1:-1:-1;7302:658:4;;;;;:::i;:::-;;:::i;4076:98::-;;;;;;;;;;-1:-1:-1;4158:9:4;4076:98;;2383:404;;;;;;;;;;-1:-1:-1;2383:404:4;;;;;:::i;:::-;;:::i;23449:281::-;;;;;;;;;;-1:-1:-1;23449:281:4;;;;;:::i;:::-;;:::i;1201:85:47:-;;;;;;;;;;-1:-1:-1;1247:7:47;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;23766:561:4;;;;;;;;;;-1:-1:-1;23766:561:4;;;;;:::i;:::-;;:::i;2009:216::-;;;;;;;;;;-1:-1:-1;2009:216:4;;;;;:::i;:::-;;:::i;18753:4174::-;;;;;;;;;;-1:-1:-1;18753:4174:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6434:328::-;;;;;;:::i;:::-;;:::i;25118:226::-;;;;;;;;;;-1:-1:-1;25118:226:4;;;;;:::i;:::-;;:::i;4669:130::-;;;;;;;;;;-1:-1:-1;4669:130:4;;;;;:::i;:::-;-1:-1:-1;;;;;4769:23:4;;;4743:7;4769:23;;;:15;:23;;;;;;;;4669:130;5686:712;;;;;;;;;;-1:-1:-1;5686:712:4;;;;;:::i;:::-;;:::i;25380:118::-;;;;;;;;;;-1:-1:-1;25476:15:4;;25457;:34;;25380:118;;3930:110;;;;;;;;;;-1:-1:-1;4021:12:4;3930:110;;26518:433;;;;;;;;;;-1:-1:-1;26518:433:4;;;;;:::i;:::-;;:::i;1469:134::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4494:139::-;;;;;;;;;;-1:-1:-1;4494:139:4;;;;;:::i;:::-;-1:-1:-1;;;;;4599:27:4;4573:7;4599:27;;;:20;:27;;;;;;;4494:139;24363:719;;;;;;;;;;-1:-1:-1;24363:719:4;;;;;:::i;:::-;;:::i;25733:559::-;;;;;;;;;;-1:-1:-1;25733:559:4;;;;;:::i;:::-;;:::i;2081:198:47:-;;;;;;;;;;-1:-1:-1;2081:198:47;;;;;:::i;:::-;;:::i;6950:316:4:-;;;;;;;;;;-1:-1:-1;6950:316:4;;;;;:::i;:::-;;:::i;4210:104::-;;;;;;;;;;-1:-1:-1;4295:12:4;4210:104;;4995:282;5097:4;-1:-1:-1;;;;;;5120:42:4;;-1:-1:-1;;;5120:42:4;;:98;;-1:-1:-1;;;;;;;5178:40:4;;-1:-1:-1;;;5178:40:4;5120:98;:150;;;-1:-1:-1;;;;;;;;;;937:40:58;;;5234:36:4;5113:157;4995:282;-1:-1:-1;;4995:282:4:o;26328:154::-;26430:45;;-1:-1:-1;;;26430:45:4;;-1:-1:-1;;;;;20963:32:63;;;26430:45:4;;;20945:51:63;26408:4:4;;26430:12;:31;;;;;;20918:18:63;;26430:45:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26987:107::-;27053:7;27078:9;27071:16;;26987:107;:::o;5313:337::-;5404:10;-1:-1:-1;;;;;5418:14:4;5404:28;;5396:70;;;;-1:-1:-1;;;5396:70:4;;31909:2:63;5396:70:4;;;31891:21:63;31948:2;31928:18;;;31921:30;31987:31;31967:18;;;31960:59;32036:18;;5396:70:4;;;;;;;;;5476:38;5501:12;5476:24;:38::i;:::-;-1:-1:-1;;;;;5532:25:4;;5560:1;5532:25;;;:11;:25;;;;;;5524:58;;;;-1:-1:-1;;;5524:58:4;;36578:2:63;5524:58:4;;;36560:21:63;36617:2;36597:18;;;36590:30;-1:-1:-1;;;36636:18:63;;;36629:46;36692:18;;5524:58:4;36376:340:63;5524:58:4;5592:51;;-1:-1:-1;;;5592:51:4;;-1:-1:-1;;;;;20963:32:63;;;5592:51:4;;;20945::63;5592:12:4;:37;;;;20918:18:63;;5592:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5313:337;:::o;1862:111::-;1920:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1920:21:4;-1:-1:-1;1953:13:4;;;;;;;;1960:6;1953:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1953:13:4;;;;;;-1:-1:-1;;;1953:13:4;;;;;;;;-1:-1:-1;;;1953:13:4;;-1:-1:-1;;;;;1953:13:4;;;;;;;;;;;;;;1862:111::o;9838:8413::-;10117:22;10149:14;10173:32;10215:24;10255:25;;:::i;:::-;10312:18;:16;:18::i;:::-;10290:19;;;:40;10362:51;10389:12;10403:9;;10362:26;:51::i;:::-;10340:19;;;:73;10424:39;;;;;;;;;;;;;;;;;;;:11;:39::i;:::-;10473;10492:4;:19;;;10473:18;:39::i;:::-;10522:77;;;;;;;;;;;;;;;;;;10573:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;10522:11;:77::i;:::-;10609:73;;;;;;;;;;;;;;;;;;10658:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;10609:73::-;10692:79;;;;;;;;;;;;;;;;;;10744:20;:12;;:20;:::i;:::-;:26;;;10692:11;:79::i;:::-;10781:75;;;;;;;;;;;;;;;;;;10831:20;:12;;:20;:::i;:::-;:24;;;10781:11;:75::i;:::-;10866:79;;;;;;;;;;;;;;;;;;10918:20;:12;;:20;:::i;:::-;:26;;;10866:11;:79::i;:::-;10955:97;;;;;;;;;;;;;;;;;;11016:20;:12;;:20;:::i;:::-;:35;;;10955:11;:97::i;:::-;11063;;;;;;;;;;;;;;;;;;11124:22;;;;:12;:22;:::i;:::-;:35;11063:11;:97::i;:::-;11170:113;;;;;;;;;;;;;;;;;;11239:22;;;;:12;:22;:::i;:::-;:43;;;11170:11;:113::i;:::-;11293:125;;;;;;;;;;;;;;;;;;11368:22;;;;:12;:22;:::i;11293:125::-;11428:95;;;;;;;;;;;;;;;;;;11488:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;11428:95::-;11533:91;;;;;;;;;;;;;;;;;;11591:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11533:91::-;11634;;;;;;;;;;;;;;;;;;11692:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11634:91::-;11735:89;;;;;;;;;;;;;;;;;;11792:22;;;;:12;:22;:::i;:::-;:31;;;11735:11;:89::i;:::-;11835:44;;;;;;;;;;;;;;;;;;:11;:44::i;:::-;11889:38;11907:19;;11889:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11889:17:4;;-1:-1:-1;;;11889:38:4:i;:::-;11937:34;;;;;;;;;;;;;;-1:-1:-1;;;11937:34:4;;;:11;:34::i;:::-;11981:27;11998:9;;11981:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11981:16:4;;-1:-1:-1;;;11981:27:4:i;:::-;12018:37;;;;;;;;;;;;;;-1:-1:-1;;;12018:37:4;;;:11;:37::i;:::-;12065:30;12082:12;;12065:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12065:16:4;;-1:-1:-1;;;12065:30:4:i;:::-;12105:50;;;;;;;;;;;;;;;;;;:11;:50::i;:::-;12165:43;12182:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12165:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12165:16:4;;-1:-1:-1;;;12165:43:4:i;:::-;12218:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;12289:54;12306:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;12289:54::-;12353:65;;;;;;;;;;;;;;;;;;12398:19;12353:11;:65::i;:::-;25476:15;;25457;:34;12429:42;;;;-1:-1:-1;;;12429:42:4;;31566:2:63;12429:42:4;;;31548:21:63;31605:2;31585:18;;;31578:30;-1:-1:-1;;;31624:18:63;;;31617:44;31678:18;;12429:42:4;31364:338:63;12429:42:4;12539:1;12505:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;:32;;:35;;:102;;12605:1;12505:102;;;12543:52;12566:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12543:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12543:52:4;-1:-1:-1;12543:22:4;;-1:-1:-1;;12543:52:4:i;:::-;-1:-1:-1;;;;;;12481:126:4;:21;;;:126;12622:10;-1:-1:-1;;;;;12636:12:4;12622:26;;;;;:58;;-1:-1:-1;12652:9:4;:28;;12622:58;12618:322;;;12704:21;12696:66;;;;-1:-1:-1;;;12696:66:4;;35504:2:63;12696:66:4;;;35486:21:63;;;35523:18;;;35516:30;35582:34;35562:18;;;35555:62;35634:18;;12696:66:4;35302:356:63;12696:66:4;12784:10;12798:9;12784:23;12776:60;;;;-1:-1:-1;;;12776:60:4;;35151:2:63;12776:60:4;;;35133:21:63;35190:2;35170:18;;;35163:30;35229:26;35209:18;;;35202:54;35273:18;;12776:60:4;34949:348:63;12776:60:4;12872:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12858:48:4;:10;-1:-1:-1;;;;;12858:48:4;;12850:79;;;;-1:-1:-1;;;12850:79:4;;40434:2:63;12850:79:4;;;40416:21:63;40473:2;40453:18;;;40446:30;-1:-1:-1;;;40492:18:63;;;40485:48;40550:18;;12850:79:4;40232:342:63;12850:79:4;12954:9;:28;12950:265;;13018:15;:51;13034:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13018:51:4;;;;;;;;;;;;;;-1:-1:-1;13018:51:4;;;12998:17;;;:71;;;13083:64;;;;-1:-1:-1;;;13083:64:4;;41835:2:63;13083:64:4;;;41817:21:63;41874:2;41854:18;;;41847:30;-1:-1:-1;;;41893:18:63;;;41886:50;41953:18;;13083:64:4;41633:344:63;13083:64:4;13161:43;13186:4;:17;;;13161:24;:43::i;:::-;13284:78;13307:19;13328:12;13342:4;:19;;;13284:22;:78::i;:::-;13249:19;;;13225:137;13226:21;;;13225:137;13373:99;13416:19;;13436:12;13449:9;;13459:12;;13373:42;:99::i;:::-;13698:17;;13694:2;13681:9;:12;;13691:2;13681:12;:::i;:::-;:15;;;;:::i;:::-;:34;;;;:::i;:::-;13660:18;;;:55;13747:18;:16;:18::i;:::-;13725:19;;;:40;14699:19;;14678:18;;14657;;;;14635:19;;;;14583:22;;;;:12;:22;:::i;:::-;:49;;;:71;;;;:::i;:::-;:92;;;;:::i;:::-;:113;;;;:::i;:::-;:135;;;;:::i;:::-;14562:4;:18;;:156;;;;;15033:4;-1:-1:-1;;;;;15025:18:4;15048:4;:18;;;15104:32;;;15138:19;;15159:12;15173:9;;15184:12;;15198:4;:21;;;15254:18;:16;:18::i;:::-;15233:4;:18;;;:39;;;;:::i;:::-;15308:4;:19;;;15081:260;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15081:260:4;;;;;;;;;;;;;;-1:-1:-1;;;;;15081:260:4;-1:-1:-1;;;;;;15081:260:4;;;;;;;;;;15025:326;;;;15081:260;15025:326;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15001:20:4;;;14986:365;;;;;15401:18;:16;:18::i;:::-;15381:4;:19;;;:38;;;;:::i;:::-;15361:17;;;:58;15485:20;;;;15474:58;;;;;;;;;;;;;:::i;:::-;15430:4;:11;;15443:4;:27;;15429:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;;15547:27:4;;;;:34;:36;15542:133;;15605:59;15623:4;:11;;;15636:4;:27;;;15605:59;;;;;;;:::i;:::-;;;;;;;;15542:133;15701:12;;15696:1054;;15801:36;15786:4;:11;;;:51;;;;;;;;:::i;:::-;;:417;;;-1:-1:-1;15924:22:4;;;;:12;:22;:::i;:::-;15883:21;;;;:38;:90;;15924:49;;;;15883:90;:::i;:::-;15862:4;:17;;;:111;;15861:342;;;;-1:-1:-1;16015:35:4;16000:4;:11;;;:50;;;;;;;;:::i;:::-;;:130;;;-1:-1:-1;16089:41:4;16074:4;:11;;;:56;;;;;;;;:::i;:::-;;16000:130;15782:958;;;16373:19;;;;16319:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;16280:17;;;;-1:-1:-1;;;;;16228:420:4;;;;;;16414:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;16461:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;16506:10;16538:4;:21;;;16581:4;:17;;;16620:4;:27;;;16228:420;;;;;;;;;;;:::i;:::-;;;;;;;;16674:5;16681:1;16684:4;:11;;;16697:4;:27;;;16666:59;;;;;;;;;;;15782:958;16960:18;;16938;:16;:18::i;:::-;16916:4;:19;;;:40;;;;:::i;:::-;16863:22;;;;:12;:22;:::i;:::-;:49;;;:94;;;;:::i;:::-;:115;;;;:::i;:::-;16848:12;;;:130;;;16997:53;;17027:22;;;;:12;:22;:::i;16997:53::-;16988:62;;17077:26;17096:6;17077:18;:26::i;:::-;17060:14;;;:43;17204:6;17159:8;:42;17168:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17159:42:4;-1:-1:-1;;;;;17159:42:4;;;;;;;;;;;;;:51;;;;:::i;:::-;17114:8;:42;17123:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17114:42:4;;;;;;;;;;;;-1:-1:-1;17114:42:4;:96;17290:14;;;;17281:23;;:6;:23;:::i;:::-;17259:17;;;;-1:-1:-1;;;;;17250:27:4;;;;;:8;:27;;;;;;:55;;;;:::i;:::-;17229:17;;;;-1:-1:-1;;;;;17220:27:4;;;;;:8;:27;;;;;:85;17319:14;;;;:18;17315:167;;17457:14;;;;17436:17;;-1:-1:-1;;;;;17436:17:4;17427:27;;;;:8;:27;;;;;;:44;;17457:14;17427:44;:::i;:::-;17406:17;;-1:-1:-1;;;;;17406:17:4;17397:27;;;;:8;:27;;;;;:74;17315:167;17506:12;17521:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;17506:40;-1:-1:-1;17560:10:4;17573:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;17560:36;-1:-1:-1;17610:17:4;17630:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;17610:52;;17780:4;:19;;;17752:10;-1:-1:-1;;;;;17681:280:4;17717:4;:17;;;-1:-1:-1;;;;;17681:280:4;;17817:4;17839:2;17859:9;17886:4;:21;;;17925:4;:11;;;17954:6;17681:280;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;18073:9:4;18069:122;;18139:11;;;;18152:27;;;;;18125:4;;-1:-1:-1;18139:11:4;;-1:-1:-1;18152:27:4;-1:-1:-1;18117:63:4;;18069:122;18222:11;;;18200:38;;;;;;;;;-1:-1:-1;18200:38:4;;18208:4;;-1:-1:-1;18222:11:4;;-1:-1:-1;18200:38:4;-1:-1:-1;9838:8413:4;;;;;;;;;;;;;;:::o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;7302:658:4:-;7444:10;7410:23;7465:489;7489:6;:13;7485:1;:17;7465:489;;;7523:79;;;;;;;;;;;;;;;;;;7564:8;:17;7573:7;-1:-1:-1;;;;;7564:17:4;-1:-1:-1;;;;;7564:17:4;;;;;;;;;;;;;7583:4;7588:1;7583:7;;;;;;;;:::i;:::-;;;;;;;7592:6;7599:1;7592:9;;;;;;;;:::i;:::-;;;;;;;7523:11;:79::i;:::-;-1:-1:-1;;;;;7634:17:4;;7616:15;7634:17;;;:8;:17;;;;;;7684:9;;:6;;7691:1;;7684:9;;;;;;:::i;:::-;;;;;;;7673:7;:20;;7665:51;;;;-1:-1:-1;;;7665:51:4;;39038:2:63;7665:51:4;;;39020:21:63;39077:2;39057:18;;;39050:30;-1:-1:-1;;;39096:18:63;;;39089:48;39154:18;;7665:51:4;38836:342:63;7665:51:4;7760:6;7767:1;7760:9;;;;;;;;:::i;:::-;;;;;;;7750:7;:19;;;;:::i;:::-;-1:-1:-1;;;;;7730:17:4;;;;;;:8;:17;;;;;:39;;;;7802:7;;:4;;7807:1;;7802:7;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7802:12:4;7822:6;7829:1;7822:9;;;;;;;;:::i;:::-;;;;;;;7802:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7783:53;;;7858:7;7850:36;;;;-1:-1:-1;;;7850:36:4;;39385:2:63;7850:36:4;;;39367:21:63;39424:2;39404:18;;;39397:30;-1:-1:-1;;;39443:18:63;;;39436:46;39499:18;;7850:36:4;39183:340:63;7850:36:4;7924:4;7929:1;7924:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7905:38:4;7915:7;-1:-1:-1;;;;;7905:38:4;;7933:6;7940:1;7933:9;;;;;;;;:::i;:::-;;;;;;;7905:38;;;;25052:25:63;;25040:2;25025:18;;24906:177;7905:38:4;;;;;;;;7509:445;;7504:3;;;;;:::i;:::-;;;;7465:489;;;;7400:560;7302:658;;:::o;2383:404::-;1094:13:47;:11;:13::i;:::-;2523:12:4::1;:19;2507:5;:12;:35;2499:78;;;::::0;-1:-1:-1;;;2499:78:4;;35865:2:63;2499:78:4::1;::::0;::::1;35847:21:63::0;35904:2;35884:18;;;35877:30;35943:32;35923:18;;;35916:60;35993:18;;2499:78:4::1;35663:354:63::0;2499:78:4::1;2592:9;2587:194;2611:5;:12;2607:1;:16;2587:194;;;2677:12;2690:1;2677:15;;;;;;;;:::i;:::-;;;;;;;2644:20;:30;2665:5;2671:1;2665:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2644:30:4::1;-1:-1:-1::0;;;;;2644:30:4::1;;;;;;;;;;;;:48;;;;2711:59;2743:5;2749:1;2743:8;;;;;;;;:::i;:::-;;;;;;;2754:12;2767:1;2754:15;;;;;;;;:::i;:::-;;;;;;;2711:59;;;;;;-1:-1:-1::0;;;;;22931:32:63;;;;22913:51;;22995:2;22980:18;;22973:34;22901:2;22886:18;;22739:274;2711:59:4::1;;;;;;;;2625:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2587:194;;;;2383:404:::0;;:::o;23449:281::-;23553:13;;23531:7;;-1:-1:-1;;;23553:13:4;;;;23549:100;;-1:-1:-1;23637:1:4;;23449:281;-1:-1:-1;23449:281:4:o;23549:100::-;23694:13;;23710:3;;-1:-1:-1;;;23694:13:4;;;;23685:22;;:28;;23449:281;-1:-1:-1;;23449:281:4:o;23766:561::-;23885:7;;23933:22;;23959:30;;;;23933:56;23929:152;;;-1:-1:-1;24015:1:4;23929:152;;;-1:-1:-1;24057:13:4;23929:152;24090:26;24119:97;24128:22;;24152:63;24161:11;24152:63;24184:30;;;;24174:7;:40;:::i;:::-;24152:8;:63::i;24119:97::-;24288:18;;24090:126;;-1:-1:-1;24317:3:4;;24288:24;;:18;;24317:3;24288:24;:::i;:::-;24256:57;;:28;24266:18;24256:7;:28;:::i;:::-;:57;;;;:::i;:::-;24255:65;;;;:::i;:::-;24233:19;;:87;;;-1:-1:-1;;;24233:19:4;;-1:-1:-1;;;;;24233:19:4;:87;:::i;:::-;24226:94;23766:561;-1:-1:-1;;;;;23766:561:4:o;2009:216::-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;41135:2:63;2102:49:4::1;::::0;::::1;41117:21:63::0;41174:2;41154:18;;;41147:30;-1:-1:-1;;;41193:18:63;;;41186:46;41249:18;;2102:49:4::1;40933:340:63::0;2102:49:4::1;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;43919:13:63;;43901:32;;43989:4;43977:17;;43971:24;43964:4;43949:20;;43942:54;44052:4;44040:17;;44034:24;44027:4;44012:20;;44005:54;44115:4;44103:17;;44097:24;44090:4;44075:20;;44068:54;44178:4;44166:17;;44160:24;44153:4;44138:20;;44131:54;44229:4;44217:17;;44211:24;-1:-1:-1;;;;;44263:35:63;;44315:4;44300:20;;;14898:44;;;;44373:4;44351:20;;;;44347:31;44395:4;44380:20;;18611:29;-1:-1:-1;;;;;44436:3:63;44432:19;;;;44428:48;44493:4;44478:20;;18509:47;44588:4;44576:17;;;44570:24;49543:6;49527:23;44651:6;44636:22;;18414:31;43888:3;43873:19;;43693:972;2192:26:4::1;;;;;;;;2009:216:::0;:::o;18753:4174::-;19106:15;19123:12;19151:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19151:30:4;19213:18;:16;:18::i;:::-;19191:40;;19285:9;19267:27;;:15;:27;:::i;:::-;19241:23;;;:53;19722:10;19744:4;19722:27;19714:66;;;;-1:-1:-1;;;19714:66:4;;34443:2:63;19714:66:4;;;34425:21:63;34482:2;34462:18;;;34455:30;34521:28;34501:18;;;34494:56;34567:18;;19714:66:4;34241:350:63;19714:66:4;20200:8;:42;20209:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20200:42:4;;;;;;;;;;;;;;-1:-1:-1;20200:42:4;;20179:18;;;:63;20384:147;-1:-1:-1;;;20420:34:4;20384:147;;20468:12;;20482:9;;;;20493:12;;;;20507:14;;20384:147;;;:::i;:::-;;;;-1:-1:-1;;20384:147:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;20384:147:4;-1:-1:-1;;;;;;20384:147:4;;;;;;;;;;20372:9;;;:159;-1:-1:-1;;20581:20:4;;20636:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20636:37:4;20678:16;:39;;;20719:4;:9;;;20636:93;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20615:114:4;;-1:-1:-1;20615:114:4;-1:-1:-1;20615:114:4;20743:169;;20775:41;20808:7;20775:32;:41::i;:::-;20834:63;20851:36;20889:7;20834:16;:63::i;:::-;20992:7;20981:33;;;;;;;;;;;;:::i;:::-;20926:4;:21;;20949:4;:28;;20925:89;;;;;;;;;;;;;20541:484;;21170:21;21280:70;21305:19;;21280:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21326:12;21340:9;;21280:24;:70::i;:::-;21249:27;;;21205:145;;;21224:23;;;21205:145;;-1:-1:-1;21205:145:4;21364:140;;21407:82;21424:35;21461:4;:27;;;21407:16;:82::i;:::-;21522:4;:28;;;:56;;;;;21555:4;:23;;;21554:24;21522:56;21518:247;;;21662:88;21679:41;21722:4;:27;;;21662:16;:88::i;:::-;21156:619;22085:35;;;22134:4;:21;;;22169:4;:23;;;22255:18;:16;:18::i;:::-;22233:19;;:40;;;;:::i;:::-;22206:4;:23;;;:68;;;;:::i;:::-;22310:12;:22;;;;;;;;:::i;:::-;22049:293;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22049:293:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;22049:293:4;-1:-1:-1;;;;;;22049:293:4;;;;;;;;;;22037:9;;;:305;-1:-1:-1;;;;22401:22:4;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22401:37:4;22443:16;:40;;;22485:4;:9;;;22401:94;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22363:132;;;;22515:11;22510:107;;22546:56;22563:33;22598:3;22546:16;:56::i;:::-;-1:-1:-1;;22686:18:4;;;;22641:8;:42;22650:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22641:42:4;-1:-1:-1;;;;;22641:42:4;;;;;;;;;;;;;:63;22637:155;;;22720:61;22737:39;22720:61;;;;;;;;;;;;:16;:61::i;:::-;22810:4;:23;;;:80;;22857:33;22810:80;;;22836:18;22810:80;22892:4;:27;;;22802:118;;;;;18753:4174;;;;;;;;;;;;;:::o;6434:328::-;6520:54;-1:-1:-1;;;;;6520:24:4;;-1:-1:-1;;;6520:24:4;:54::i;:::-;6512:99;;;;-1:-1:-1;;;6512:99:4;;30844:2:63;6512:99:4;;;30826:21:63;;;30863:18;;;30856:30;30922:34;30902:18;;;30895:62;30974:18;;6512:99:4;30642:356:63;6512:99:4;-1:-1:-1;;;;;6677:16:4;;6621:14;6677:16;;;:8;:16;;;;;;6638:9;;6677:25;;6638:9;;6677:25;:::i;:::-;-1:-1:-1;;;;;6658:16:4;;;;;;:8;:16;;;;;;;;;:44;;;;6718:37;25052:25:63;;;6736:10:4;;6718:37;;25025:18:63;6718:37:4;;;;;;;6502:260;6434:328;:::o;25118:226::-;1094:13:47;:11;:13::i;:::-;25476:15:4;;25457;:34;25202:46:::1;;;::::0;-1:-1:-1;;;25202:46:4;;32267:2:63;25202:46:4::1;::::0;::::1;32249:21:63::0;32306:2;32286:18;;;32279:30;-1:-1:-1;;;32325:18:63;;;32318:48;32383:18;;25202:46:4::1;32065:342:63::0;25202:46:4::1;25258:15;:34:::0;;;25307:30:::1;::::0;25052:25:63;;;25307:30:4::1;::::0;25040:2:63;25025:18;25307:30:4::1;24906:177:63::0;5686:712:4;5798:10;5775:20;5843:25;;;:11;:25;;;;;;:50;;5871:15;;5843:50;:::i;:::-;-1:-1:-1;;;;;5903:25:4;;;;;;:11;:25;;;;;:42;;;5981:6;:21;5818:75;;-1:-1:-1;5963:39:4;;;5955:68;;;;-1:-1:-1;;;5955:68:4;;38338:2:63;5955:68:4;;;38320:21:63;38377:2;38357:18;;;38350:30;-1:-1:-1;;;38396:18:63;;;38389:46;38452:18;;5955:68:4;38136:340:63;5955:68:4;6034:38;6059:12;6034:24;:38::i;:::-;6088:9;6083:229;6103:26;;;6083:229;;;6205:1;6158:15;6205:1;6174:15;;6190:1;6174:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6158:35:4;;;;;;;;;;;;;;-1:-1:-1;6158:35:4;;;:49;6150:87;;;;-1:-1:-1;;;6150:87:4;;32614:2:63;6150:87:4;;;32596:21:63;32653:2;32633:18;;;32626:30;32692:27;32672:18;;;32665:55;32737:18;;6150:87:4;32412:349:63;6150:87:4;6289:12;6251:15;:35;6267:15;;6283:1;6267:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6251:35:4;;;;;;;;;;;;;;-1:-1:-1;6251:35:4;:50;;-1:-1:-1;;;;;;6251:50:4;;;;;;;;;;;6131:3;;;;:::i;:::-;;;;6083:229;;;;6345:12;-1:-1:-1;;;;;6327:64:4;;6359:15;;6376:14;6327:64;;;;;;;;:::i;:::-;;;;;;;;5765:633;;5686:712;;:::o;26518:433::-;1094:13:47;:11;:13::i;:::-;26624:45:4::1;::::0;-1:-1:-1;;;26624:45:4;;-1:-1:-1;;;;;20963:32:63;;;26624:45:4::1;::::0;::::1;20945:51:63::0;26624:12:4::1;:31;::::0;::::1;::::0;20918:18:63;;26624:45:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26616:90;;;::::0;-1:-1:-1;;;26616:90:4;;33728:2:63;26616:90:4::1;::::0;::::1;33710:21:63::0;;;33747:18;;;33740:30;33806:34;33786:18;;;33779:62;33858:18;;26616:90:4::1;33526:356:63::0;26616:90:4::1;-1:-1:-1::0;;;;;26734:22:4;;::::1;26716:15;26734:22:::0;;;:8:::1;:22;::::0;;;;;;;26766:26;;;;26841:17;;;;::::1;26832:27:::0;;;;;:37:::1;::::0;26734:22;;26832:37:::1;:::i;:::-;26811:17:::0;;-1:-1:-1;;;;;26811:17:4;;::::1;26802:27;::::0;;;:8:::1;:27;::::0;;;;;;;;:67;;;;26884:60;25052:25:63;;;26884:60:4;;::::1;::::0;::::1;::::0;25025:18:63;26884:60:4::1;;;;;;;26606:345;26518:433:::0;:::o;1469:134::-;1529:13;1553:43;;;;;;;;;;;;;;;;;;;1469:134;:::o;24363:719::-;24512:39;;-1:-1:-1;;;24512:39:4;;-1:-1:-1;;;;;20963:32:63;;;24512:39:4;;;20945:51:63;24451:35:4;;;;24512:12;:25;;;;20918:18:63;;24512:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24605:10;;;;;-1:-1:-1;;;;;24584:32:4;;;24561:20;24584:32;;;:20;:32;;;;;;24634:10;;24450:101;;-1:-1:-1;24450:101:4;;-1:-1:-1;24584:32:4;24634;24626:69;;;;-1:-1:-1;;;24626:69:4;;34798:2:63;24626:69:4;;;34780:21:63;34837:2;34817:18;;;34810:30;-1:-1:-1;;;34856:18:63;;;34849:54;34920:18;;24626:69:4;34596:348:63;24626:69:4;24713:10;;:26;-1:-1:-1;24713:26:4;24705:64;;;;-1:-1:-1;;;24705:64:4;;36224:2:63;24705:64:4;;;36206:21:63;36263:2;36243:18;;;36236:30;36302:27;36282:18;;;36275:55;36347:18;;24705:64:4;36022:349:63;24705:64:4;24787:17;24779:61;;;;-1:-1:-1;;;24779:61:4;;37978:2:63;24779:61:4;;;37960:21:63;38017:2;37997:18;;;37990:30;38056:33;38036:18;;;38029:61;38107:18;;24779:61:4;37776:355:63;24779:61:4;24879:26;;24858:17;;;;:47;;24850:86;;;;-1:-1:-1;;;24850:86:4;;40079:2:63;24850:86:4;;;40061:21:63;40118:2;40098:18;;;40091:30;40157:28;40137:18;;;40130:56;40203:18;;24850:86:4;39877:350:63;24850:86:4;24954:17;;;;:22;24946:59;;;;-1:-1:-1;;;24946:59:4;;32968:2:63;24946:59:4;;;32950:21:63;33007:2;32987:18;;;32980:30;33046:26;33026:18;;;33019:54;33090:18;;24946:59:4;32766:348:63;24946:59:4;25023:15;25015:60;;;;-1:-1:-1;;;25015:60:4;;31205:2:63;25015:60:4;;;31187:21:63;;;31224:18;;;31217:30;31283:34;31263:18;;;31256:62;31335:18;;25015:60:4;31003:356:63;25733:559:4;25638:10;-1:-1:-1;;;;;25652:9:4;25638:23;;25630:49;;;;-1:-1:-1;;;25630:49:4;;37275:2:63;25630:49:4;;;37257:21:63;37314:2;37294:18;;;37287:30;-1:-1:-1;;;37333:18:63;;;37326:43;37386:18;;25630:49:4;37073:337:63;25630:49:4;-1:-1:-1;;;;;25866:28:4;;::::1;25843:20;25866:28:::0;;;:15:::1;:28;::::0;;;;;::::1;25986:26:::0;25978:59:::1;;;::::0;-1:-1:-1;;;25978:59:4;;41835:2:63;25978:59:4::1;::::0;::::1;41817:21:63::0;41874:2;41854:18;;;41847:30;-1:-1:-1;;;41893:18:63;;;41886:50;41953:18;;25978:59:4::1;41633:344:63::0;25978:59:4::1;26093:39;::::0;-1:-1:-1;;;26093:39:4;;-1:-1:-1;;;;;20963:32:63;;;26093:39:4::1;::::0;::::1;20945:51:63::0;26048:40:4::1;::::0;26093:12:::1;:25:::0;;::::1;::::0;::::1;::::0;20918:18:63;;26093:39:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26150:15:4;;26047:85;;-1:-1:-1;26142:56:4::1;;;::::0;-1:-1:-1;;;26142:56:4;;34798:2:63;26142:56:4::1;::::0;::::1;34780:21:63::0;34837:2;34817:18;;;34810:30;-1:-1:-1;;;34856:18:63;;;34849:54;34920:18;;26142:56:4::1;34596:348:63::0;26142:56:4::1;26269:15:::0;;26208:77:::1;::::0;-1:-1:-1;;;26208:77:4;;-1:-1:-1;;;;;21273:15:63;;;26208:77:4::1;::::0;::::1;21255:34:63::0;21325:15;;;21305:18;;;21298:43;21357:18;;;21350:34;;;;26208:12:4::1;:33:::0;;::::1;::::0;::::1;::::0;21190:18:63;;26208:77:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25833:459;;25733:559:::0;;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;33321:2:63;2161:73:47::1;::::0;::::1;33303:21:63::0;33360:2;33340:18;;;33333:30;33399:34;33379:18;;;33372:62;-1:-1:-1;;;33450:18:63;;;33443:36;33496:19;;2161:73:47::1;33119:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;6950:316:4:-;7059:16;;;7073:1;7059:16;;;;;;;;;7032:24;;7059:16;;;;;;;;;-1:-1:-1;;7125:24:4;;;7147:1;7125:24;;;;;;;;;7032:43;;-1:-1:-1;7085:37:4;;7125:24;-1:-1:-1;7125:24:4;;;;;;;;;;;-1:-1:-1;7125:24:4;7085:64;;7172:6;7159:7;7167:1;7159:10;;;;;;;;:::i;:::-;;;;;;:19;;;;;7206:4;7188:12;7201:1;7188:15;;;;;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;7188:22:4;;;-1:-1:-1;;;;;7188:22:4;;;;;7220:39;7237:12;7251:7;7220:16;:39::i;922:277:40:-;1055:7;-1:-1:-1;;;;;1102:20:40;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;1129:20;:12;;:20;:::i;:::-;:26;;;1157:9;;1091:76;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1081:87;;;;;;:111;1074:118;;922:277;;;;;:::o;5054:112:62:-;5103:59;5158:2;5119:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5119:42:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5119:42:62;-1:-1:-1;;;5119:42:62;;;5103:15;:59::i;4833:114::-;4883:60;4939:2;4899:43;;;;;;25052:25:63;;25040:2;25025:18;;24906:177;4899:43:62;;;;-1:-1:-1;;4899:43:62;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:43:62;-1:-1:-1;;;4899:43:62;;;4883:15;:60::i;6298:136::-;6359:71;6422:2;6426;6375:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6375:54:62;;;;;;;;;;;;;;-1:-1:-1;;;;;6375:54:62;-1:-1:-1;;;6375:54:62;;;6359:15;:71::i;:::-;6298:136;;:::o;5888:130::-;5946:68;6006:2;6010;5962:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5962:51:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5962:51:62;-1:-1:-1;;;5962:51:62;;;5946:15;:68::i;1115:115::-;1168:58;1222:2;1184:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1184:41:62;;;;;;;;;;;;;;-1:-1:-1;;;;;1184:41:62;-1:-1:-1;;;1184:41:62;;;1168:15;:58::i;2483:571:41:-;2603:13;2652:9;:5;2660:1;2652:9;:::i;:::-;2640:1;:8;:21;;2632:60;;;;-1:-1:-1;;;2632:60:41;;41480:2:63;2632:60:41;;;41462:21:63;41519:2;41499:18;;;41492:30;41558:28;41538:18;;;41531:56;41604:18;;2632:60:41;41278:350:63;2632:60:41;-1:-1:-1;2787:21:41;2804:2;2787:21;2781:28;-1:-1:-1;;;;;;2936:79:41;;2483:571::o;7966:1235:4:-;8160:51;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8160:51:4;8213:22;8289;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8278:64:4;;8347:5;8278:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8392:34;;;;8247:108;;-1:-1:-1;8373:8:4;:53;;8365:90;;;;-1:-1:-1;;;8365:90:4;;36923:2:63;8365:90:4;;;36905:21:63;36962:2;36942:18;;;36935:30;37001:25;36981:18;;;36974:53;37044:18;;8365:90:4;36721:347:63;8365:90:4;8497:33;;8474:56;;;8466:95;;;;-1:-1:-1;;;8466:95:4;;38683:2:63;8466:95:4;;;38665:21:63;38722:2;38702:18;;;38695:30;38761:28;38741:18;;;38734:56;38807:18;;8466:95:4;38481:350:63;8466:95:4;8616:39;;;;8579:33;;:76;;8571:114;;;;-1:-1:-1;;;8571:114:4;;34089:2:63;8571:114:4;;;34071:21:63;34128:2;34108:18;;;34101:30;34167:27;34147:18;;;34140:55;34212:18;;8571:114:4;33887:349:63;8571:114:4;8765:14;8713:22;;;;:12;:22;:::i;:::-;:49;;;:66;;;;:::i;:::-;8696:83;-1:-1:-1;8790:25:4;8818:89;8696:83;8875:22;;;;:12;:22;:::i;8818:89::-;8790:117;-1:-1:-1;9110:8:4;:42;9119:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9110:42:4;-1:-1:-1;;;;;9110:42:4;;;;;;;;;;;;;9089:17;:63;;9081:113;;;;-1:-1:-1;;;9081:113:4;;40781:2:63;9081:113:4;;;40763:21:63;40820:2;40800:18;;;40793:30;40859:27;40839:18;;;40832:55;40904:18;;9081:113:4;40579:349:63;9081:113:4;8237:964;7966:1235;;;;;;:::o;510:1245:43:-;1281:26;1540:54;1557:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;:::-;1540:16;:54::i;:::-;1482:43;1499:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;1482:43::-;1437:30;1454:12;;1437:16;:30::i;:::-;1395:27;1412:9;;1395:16;:27::i;:::-;1336:44;1359:19;;1336:16;:44::i;:::-;1310:70;;:11;:70;:::i;:::-;:112;;;;:::i;:::-;:157;;;;:::i;:::-;:215;;;;:::i;:::-;:284;;;;:::i;:::-;1281:313;-1:-1:-1;1707:8:43;1685:37;;1677:71;;;;-1:-1:-1;;;1677:71:43;;39730:2:63;1677:71:43;;;39712:21:63;39769:2;39749:18;;;39742:30;-1:-1:-1;;;39788:18:63;;;39781:50;39848:18;;1677:71:43;39528:344:63;1359:130:47;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;37617:2:63;1414:68:47;;;37599:21:63;;;37636:18;;;37629:30;37695:34;37675:18;;;37668:62;37747:18;;1414:68:47;37415:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;30298:172:62:-;30377:89;30450:2;30454;30458;30462;30393:72;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30393:72:62;;;;;;;;;;;;;;-1:-1:-1;;;;;30393:72:62;-1:-1:-1;;;30393:72:62;;;30377:15;:89::i;589:104:61:-;647:7;677:1;673;:5;:13;;685:1;673:13;;;681:1;673:13;666:20;589:104;-1:-1:-1;;;589:104:61:o;4713:125:38:-;4781:50;4809:4;563;4781:27;:50::i;23074:339:4:-;23165:17;23196:6;23204:3;23185:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23165:43;;23218:38;23251:4;23218:32;:38::i;:::-;23312:4;23306:11;23355:2;23349:4;23345:13;23388:8;23379:7;23372:25;3558:929:38;3738:21;3769:16;3795;3829:23;3856:26;3869:12;3856;:26::i;:::-;3828:54;-1:-1:-1;3892:24:38;3919:70;3935:19;3956:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;3919:15;:70::i;:::-;3892:97;-1:-1:-1;4087:22:38;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4087:37:38;-1:-1:-1;;;4202:20:38;:12;;:20;:::i;:::-;4224:16;1295:18;;;;;;;;;;;;;-1:-1:-1;;;1295:18:38;;;1318:14;;;;;;;;;;;;;;;;;1203;;;;;;;;;;;;;;;;;1162:56;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1162:56:38;;;;;;;;;;1269:90;;;;1162:56;1269:90;;:::i;:::-;;;;;;;;;;;;;1491:29;;;;;;4266:10;4278:9;;4138:159;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4138:159:38;;;;;;;;;;;;;;-1:-1:-1;;;;;4138:159:38;-1:-1:-1;;;;;;4138:159:38;;;;;;;;;;4087:211;;;;4138:159;4087:211;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4061:237:38;;-1:-1:-1;4061:237:38;-1:-1:-1;4308:143:38;;;;4421:3;4410:30;;;;;;;;;;;;:::i;:::-;4389:51;;-1:-1:-1;4389:51:38;-1:-1:-1;4308:143:38;4460:20;4476:3;4460:15;:20::i;:::-;3818:669;;3558:929;;;;;;;;:::o;1333:274:59:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;176:288:62:-;264:14;;129:42;373:2;360:16;;240:21;;264:14;360:16;129:42;400:5;389:68;380:77;;335:126;;176:288;:::o;1969:153:43:-;2038:7;2091:22;2111:2;-1:-1:-1;;2091:22:43;:::i;:::-;2071:15;:3;2084:2;2071:15;:::i;:::-;2064:51;;2070:44;2064:2;:51;:::i;429:173:41:-;531:6;517:4;:11;:20;513:83;;;564:20;;429:173::o;1829:229:38:-;1945:23;2022:28;2036:13;;;;:3;:13;:::i;:::-;2022;:28::i;:::-;1998:53;;;;;;25052:25:63;;25040:2;25025:18;;24906:177;1998:53:38;;;;;;;;;;;;;1985:66;;1829:229;;;:::o;4844:291::-;4931:7;4957:171;4968:159;;;;;;;;5002:4;4968:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;4968:159:38;;;;;;;5057:12;5286:9;;5141:170;5057:12;4968:159;;;;5103:9;-1:-1:-1;;;;;4968:159:38;;;;4957:10;:171::i;704:411:59:-;768:4;975:60;1000:7;-1:-1:-1;;;975:24:59;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:59;1077:7;-1:-1:-1;;;;;;1052:24:59;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:59:o;4223:638::-;4385:71;;;-1:-1:-1;;;;;;26565:33:63;;4385:71:59;;;;26547:52:63;;;;4385:71:59;;;;;;;;;;26520:18:63;;;;4385:71:59;;;;;;;;;-1:-1:-1;;;;;4385:71:59;-1:-1:-1;;;4385:71:59;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:59:o;5644:478:38:-;5723:7;1421:14;;;;;;;;;;;;;;;;;1411:25;;;;;;;;5823:16;;;5857:24;;;5899:30;;;;5947:15;;;;;;;;:::i;:::-;5980:13;;;;;;;;:::i;:::-;6011;;;;;;;;:::i;:::-;6052:17;;;;:3;:17;:::i;:::-;6042:28;;;;;;;:::i;:::-;;;;;;;;;5759:355;;;;;;;;;6088:12;;;;;5759:355;;25953:25:63;;;26009:2;25994:18;;25987:34;;;;26052:2;26037:18;;26030:34;;;;26095:2;26080:18;;26073:34;;;;-1:-1:-1;;;;;26182:15:63;;;26176:3;26161:19;;26154:44;26235:15;;26134:3;26214:19;;26207:44;26288:15;26282:3;26267:19;;26260:44;26335:3;26320:19;;26313:35;26379:3;26364:19;;26357:35;25940:3;25925:19;;25582:816;5759:355:38;;;;;;;;;;;;;5749:366;;;;;;5742:373;;5644:478;;;:::o;5317:321::-;5385:7;1713:109;5504:3;:8;;;5488:26;;;;;;5548:3;:11;;;5532:29;;;;;;5579:3;:11;;;5608:3;:21;;;5421:209;;;;;;;;;;;25347:25:63;;;25403:2;25388:18;;25381:34;;;;25446:2;25431:18;;25424:34;;;;25489:2;25474:18;;25467:34;-1:-1:-1;;;;;25538:32:63;25532:3;25517:19;;25510:61;25334:3;25319:19;;25088:489;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:63:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:681::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;364:68;380:51;428:2;380:51;:::i;:::-;364:68;:::i;:::-;454:3;478:2;473:3;466:15;506:2;501:3;497:12;490:19;;541:2;533:6;529:15;593:3;588:2;582;579:1;575:10;567:6;563:23;559:32;556:41;553:61;;;610:1;607;600:12;553:61;632:1;642:163;656:2;653:1;650:9;642:163;;;713:17;;701:30;;751:12;;;;783;;;;674:1;667:9;642:163;;;-1:-1:-1;823:5:63;;153:681;-1:-1:-1;;;;;;;153:681:63:o;839:164::-;915:13;;964;;957:21;947:32;;937:60;;993:1;990;983:12;1008:347;1059:8;1069:6;1123:3;1116:4;1108:6;1104:17;1100:27;1090:55;;1141:1;1138;1131:12;1090:55;-1:-1:-1;1164:20:63;;-1:-1:-1;;;;;1196:30:63;;1193:50;;;1239:1;1236;1229:12;1193:50;1276:4;1268:6;1264:17;1252:29;;1328:3;1321:4;1312:6;1304;1300:19;1296:30;1293:39;1290:59;;;1345:1;1342;1335:12;1290:59;1008:347;;;;;:::o;1360:496::-;1413:5;1466:3;1459:4;1451:6;1447:17;1443:27;1433:55;;1484:1;1481;1474:12;1433:55;1513:6;1507:13;-1:-1:-1;;;;;1535:2:63;1532:26;1529:52;;;1561:18;;:::i;:::-;1605:55;1648:2;1629:13;;-1:-1:-1;;1625:27:63;1654:4;1621:38;1605:55;:::i;:::-;1685:2;1676:7;1669:19;1731:3;1724:4;1719:2;1711:6;1707:15;1703:26;1700:35;1697:55;;;1748:1;1745;1738:12;1697:55;1761:64;1822:2;1815:4;1806:7;1802:18;1795:4;1787:6;1783:17;1761:64;:::i;:::-;1843:7;1360:496;-1:-1:-1;;;;1360:496:63:o;1861:165::-;1930:5;1975:3;1966:6;1961:3;1957:16;1953:26;1950:46;;;1992:1;1989;1982:12;1950:46;-1:-1:-1;2014:6:63;1861:165;-1:-1:-1;1861:165:63:o;2031:160::-;2096:5;2141:2;2132:6;2127:3;2123:16;2119:25;2116:45;;;2157:1;2154;2147:12;2196:159;2263:20;;2323:6;2312:18;;2302:29;;2292:57;;2345:1;2342;2335:12;2360:156;2426:20;;2486:4;2475:16;;2465:27;;2455:55;;2506:1;2503;2496:12;2521:175;2588:20;;-1:-1:-1;;;;;2637:34:63;;2627:45;;2617:73;;2686:1;2683;2676:12;2701:247;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;2953:323::-;3029:6;3037;3090:2;3078:9;3069:7;3065:23;3061:32;3058:52;;;3106:1;3103;3096:12;3058:52;3145:9;3132:23;3164:31;3189:5;3164:31;:::i;:::-;3214:5;3266:2;3251:18;;;;3238:32;;-1:-1:-1;;;2953:323:63:o;3281:396::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:52;;;3434:1;3431;3424:12;3386:52;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3599:2:63;3584:18;;3571:32;3612:33;3571:32;3612:33;:::i;:::-;3664:7;3654:17;;;3281:396;;;;;:::o;3682:615::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3885:9;3872:23;-1:-1:-1;;;;;3955:2:63;3947:6;3944:14;3941:34;;;3971:1;3968;3961:12;3941:34;4009:6;3998:9;3994:22;3984:32;;4054:7;4047:4;4043:2;4039:13;4035:27;4025:55;;4076:1;4073;4066:12;4025:55;4116:2;4103:16;4142:2;4134:6;4131:14;4128:34;;;4158:1;4155;4148:12;4128:34;4211:7;4206:2;4196:6;4193:1;4189:14;4185:2;4181:23;4177:32;4174:45;4171:65;;;4232:1;4229;4222:12;4171:65;4263:2;4255:11;;;;;4285:6;;-1:-1:-1;3682:615:63;;-1:-1:-1;;;;3682:615:63:o;4302:1242::-;4428:6;4436;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;4545:9;4532:23;-1:-1:-1;;;;;4615:2:63;4607:6;4604:14;4601:34;;;4631:1;4628;4621:12;4601:34;4669:6;4658:9;4654:22;4644:32;;4714:7;4707:4;4703:2;4699:13;4695:27;4685:55;;4736:1;4733;4726:12;4685:55;4772:2;4759:16;4794:4;4818:68;4834:51;4882:2;4834:51;:::i;4818:68::-;4908:3;4932:2;4927:3;4920:15;4960:2;4955:3;4951:12;4944:19;;4991:2;4987;4983:11;5039:7;5034:2;5028;5025:1;5021:10;5017:2;5013:19;5009:28;5006:41;5003:61;;;5060:1;5057;5050:12;5003:61;5082:1;5073:10;;5092:238;5106:2;5103:1;5100:9;5092:238;;;5177:3;5164:17;5194:31;5219:5;5194:31;:::i;:::-;5238:18;;5124:1;5117:9;;;;;5276:12;;;;5308;;5092:238;;;-1:-1:-1;5349:5:63;-1:-1:-1;;5392:18:63;;5379:32;;-1:-1:-1;;5423:16:63;;;5420:36;;;5452:1;5449;5442:12;5420:36;;5475:63;5530:7;5519:8;5508:9;5504:24;5475:63;:::i;:::-;5465:73;;;4302:1242;;;;;:::o;5549:1250::-;5683:6;5691;5744:2;5732:9;5723:7;5719:23;5715:32;5712:52;;;5760:1;5757;5750:12;5712:52;5800:9;5787:23;-1:-1:-1;;;;;5870:2:63;5862:6;5859:14;5856:34;;;5886:1;5883;5876:12;5856:34;5924:6;5913:9;5909:22;5899:32;;5969:7;5962:4;5958:2;5954:13;5950:27;5940:55;;5991:1;5988;5981:12;5940:55;6027:2;6014:16;6049:4;6073:68;6089:51;6137:2;6089:51;:::i;6073:68::-;6163:3;6187:2;6182:3;6175:15;6215:2;6210:3;6206:12;6199:19;;6246:2;6242;6238:11;6294:7;6289:2;6283;6280:1;6276:10;6272:2;6268:19;6264:28;6261:41;6258:61;;;6315:1;6312;6305:12;6258:61;6337:1;6328:10;;6347:238;6361:2;6358:1;6355:9;6347:238;;;6432:3;6419:17;6449:31;6474:5;6449:31;:::i;:::-;6493:18;;6379:1;6372:9;;;;;6531:12;;;;6563;;6347:238;;6804:202;6871:6;6924:2;6912:9;6903:7;6899:23;6895:32;6892:52;;;6940:1;6937;6930:12;6892:52;6963:37;6990:9;6963:37;:::i;7011:414::-;7096:6;7104;7157:2;7145:9;7136:7;7132:23;7128:32;7125:52;;;7173:1;7170;7163:12;7125:52;7196:37;7223:9;7196:37;:::i;:::-;7186:47;;7277:2;7266:9;7262:18;7256:25;-1:-1:-1;;;;;7296:6:63;7293:30;7290:50;;;7336:1;7333;7326:12;7290:50;7359:60;7411:7;7402:6;7391:9;7387:22;7359:60;:::i;7430:286::-;7488:6;7541:2;7529:9;7520:7;7516:23;7512:32;7509:52;;;7557:1;7554;7547:12;7509:52;7583:23;;-1:-1:-1;;;;;;7635:32:63;;7625:43;;7615:71;;7682:1;7679;7672:12;7721:414;7806:6;7814;7867:2;7855:9;7846:7;7842:23;7838:32;7835:52;;;7883:1;7880;7873:12;7835:52;7916:9;7910:16;-1:-1:-1;;;;;7941:6:63;7938:30;7935:50;;;7981:1;7978;7971:12;7935:50;8004:60;8056:7;8047:6;8036:9;8032:22;8004:60;:::i;:::-;7994:70;;;8083:46;8125:2;8114:9;8110:18;8083:46;:::i;:::-;8073:56;;7721:414;;;;;:::o;8408:492::-;8516:6;8524;8577:2;8565:9;8556:7;8552:23;8548:32;8545:52;;;8593:1;8590;8583:12;8545:52;8625:9;8619:16;8664:1;8657:5;8654:12;8644:40;;8680:1;8677;8670:12;8644:40;8752:2;8737:18;;8731:25;8703:5;;-1:-1:-1;;;;;;8768:30:63;;8765:50;;;8811:1;8808;8801:12;8905:1533;9120:6;9128;9136;9144;9152;9160;9168;9176;9184;9192;9245:3;9233:9;9224:7;9220:23;9216:33;9213:53;;;9262:1;9259;9252:12;9213:53;9302:9;9289:23;-1:-1:-1;;;;;9372:2:63;9364:6;9361:14;9358:34;;;9388:1;9385;9378:12;9358:34;9427:58;9477:7;9468:6;9457:9;9453:22;9427:58;:::i;:::-;9504:8;;-1:-1:-1;9401:84:63;-1:-1:-1;9592:2:63;9577:18;;9564:32;;-1:-1:-1;9608:16:63;;;9605:36;;;9637:1;9634;9627:12;9605:36;9660:74;9726:7;9715:8;9704:9;9700:24;9660:74;:::i;:::-;9650:84;;9787:2;9776:9;9772:18;9759:32;9743:48;;9816:2;9806:8;9803:16;9800:36;;;9832:1;9829;9822:12;9800:36;9871:60;9923:7;9912:8;9901:9;9897:24;9871:60;:::i;:::-;9950:8;;-1:-1:-1;9845:86:63;-1:-1:-1;10038:2:63;10023:18;;10010:32;;-1:-1:-1;10054:16:63;;;10051:36;;;10083:1;10080;10073:12;10051:36;;10122:60;10174:7;10163:8;10152:9;10148:24;10122:60;:::i;:::-;10201:8;;-1:-1:-1;10096:86:63;-1:-1:-1;10255:73:63;;-1:-1:-1;10320:7:63;10314:3;10299:19;;10255:73;:::i;:::-;10245:83;;10375:3;10364:9;10360:19;10347:33;10337:43;;10427:3;10416:9;10412:19;10399:33;10389:43;;8905:1533;;;;;;;;;;;;;:::o;10443:1319::-;10604:6;10612;10620;10628;10636;10644;10652;10660;10713:3;10701:9;10692:7;10688:23;10684:33;10681:53;;;10730:1;10727;10720:12;10681:53;10770:9;10757:23;-1:-1:-1;;;;;10840:2:63;10832:6;10829:14;10826:34;;;10856:1;10853;10846:12;10826:34;10895:58;10945:7;10936:6;10925:9;10921:22;10895:58;:::i;:::-;10972:8;;-1:-1:-1;10869:84:63;-1:-1:-1;11054:2:63;11039:18;;11026:32;;-1:-1:-1;11111:2:63;11096:18;;11083:32;;-1:-1:-1;11127:16:63;;;11124:36;;;11156:1;11153;11146:12;11124:36;11179:74;11245:7;11234:8;11223:9;11219:24;11179:74;:::i;:::-;11169:84;;11306:2;11295:9;11291:18;11278:32;11262:48;;11335:2;11325:8;11322:16;11319:36;;;11351:1;11348;11341:12;11319:36;11390:60;11442:7;11431:8;11420:9;11416:24;11390:60;:::i;:::-;11469:8;;-1:-1:-1;11364:86:63;-1:-1:-1;11557:3:63;11542:19;;11529:33;;-1:-1:-1;11574:16:63;;;11571:36;;;11603:1;11600;11593:12;11571:36;;11642:60;11694:7;11683:8;11672:9;11668:24;11642:60;:::i;:::-;10443:1319;;;;-1:-1:-1;10443:1319:63;;-1:-1:-1;10443:1319:63;;;;;;11721:8;-1:-1:-1;;;10443:1319:63:o;11767:630::-;11871:6;11924:3;11912:9;11903:7;11899:23;11895:33;11892:53;;;11941:1;11938;11931:12;11892:53;11974:2;11968:9;12016:3;12008:6;12004:16;12086:6;12074:10;12071:22;-1:-1:-1;;;;;12038:10:63;12035:34;12032:62;12029:88;;;12097:18;;:::i;:::-;12137:10;12133:2;12126:22;;12178:9;12172:16;12164:6;12157:32;12243:2;12232:9;12228:18;12222:25;12217:2;12209:6;12205:15;12198:50;12302:2;12291:9;12287:18;12281:25;12276:2;12268:6;12264:15;12257:50;12361:2;12350:9;12346:18;12340:25;12335:2;12327:6;12323:15;12316:50;12385:6;12375:16;;;11767:630;;;;:::o;12402:856::-;12493:6;12546:3;12534:9;12525:7;12521:23;12517:33;12514:53;;;12563:1;12560;12553:12;12514:53;12589:22;;:::i;:::-;12647:9;12634:23;12627:5;12620:38;12718:2;12707:9;12703:18;12690:32;12685:2;12678:5;12674:14;12667:56;12783:2;12772:9;12768:18;12755:32;12750:2;12743:5;12739:14;12732:56;12848:2;12837:9;12833:18;12820:32;12815:2;12808:5;12804:14;12797:56;12914:3;12903:9;12899:19;12886:33;12880:3;12873:5;12869:15;12862:58;12953:39;12987:3;12976:9;12972:19;12953:39;:::i;:::-;12947:3;12940:5;12936:15;12929:64;13026:37;13058:3;13047:9;13043:19;13026:37;:::i;:::-;13020:3;13013:5;13009:15;13002:62;13097:38;13130:3;13119:9;13115:19;13097:38;:::i;:::-;13091:3;13084:5;13080:15;13073:63;13155:3;13190:37;13223:2;13212:9;13208:18;13190:37;:::i;:::-;13174:14;;;13167:61;13178:5;12402:856;-1:-1:-1;;;12402:856:63:o;13263:929::-;13366:6;13374;13418:9;13409:7;13405:23;13448:3;13444:2;13440:12;13437:32;;;13465:1;13462;13455:12;13437:32;13489:4;13485:2;13481:13;13478:33;;;13507:1;13504;13497:12;13478:33;;13533:22;;:::i;:::-;13584:9;13578:16;13571:5;13564:31;13648:2;13637:9;13633:18;13627:25;13622:2;13615:5;13611:14;13604:49;13706:2;13695:9;13691:18;13685:25;13680:2;13673:5;13669:14;13662:49;13764:2;13753:9;13749:18;13743:25;13738:2;13731:5;13727:14;13720:49;13823:3;13812:9;13808:19;13802:26;13796:3;13789:5;13785:15;13778:51;13874:3;13863:9;13859:19;13853:26;13888:33;13913:7;13888:33;:::i;:::-;13948:3;13937:15;;13930:32;14007:3;13992:19;;13986:26;14021:33;13986:26;14021:33;:::i;:::-;14081:3;14070:15;;14063:32;14074:5;-1:-1:-1;14138:48:63;14180:4;14165:20;;14138:48;:::i;14197:180::-;14256:6;14309:2;14297:9;14288:7;14284:23;14280:32;14277:52;;;14325:1;14322;14315:12;14277:52;-1:-1:-1;14348:23:63;;14197:180;-1:-1:-1;14197:180:63:o;14382:457::-;14479:6;14487;14540:2;14528:9;14519:7;14515:23;14511:32;14508:52;;;14556:1;14553;14546:12;14508:52;14592:9;14579:23;14569:33;;14653:2;14642:9;14638:18;14625:32;-1:-1:-1;;;;;14672:6:63;14669:30;14666:50;;;14712:1;14709;14702:12;14666:50;14735:22;;14791:3;14773:16;;;14769:26;14766:46;;;14808:1;14805;14798:12;14953:266;15041:6;15036:3;15029:19;15093:6;15086:5;15079:4;15074:3;15070:14;15057:43;-1:-1:-1;15145:1:63;15120:16;;;15138:4;15116:27;;;15109:38;;;;15201:2;15180:15;;;-1:-1:-1;;15176:29:63;15167:39;;;15163:50;;14953:266::o;15224:257::-;15265:3;15303:5;15297:12;15330:6;15325:3;15318:19;15346:63;15402:6;15395:4;15390:3;15386:14;15379:4;15372:5;15368:16;15346:63;:::i;:::-;15463:2;15442:15;-1:-1:-1;;15438:29:63;15429:39;;;;15470:4;15425:50;;15224:257;-1:-1:-1;;15224:257:63:o;15486:243::-;15573:1;15566:5;15563:12;15553:143;;15618:10;15613:3;15609:20;15606:1;15599:31;15653:4;15650:1;15643:15;15681:4;15678:1;15671:15;15553:143;15705:18;;15486:243::o;15734:884::-;15800:3;15846:5;15833:19;15861:33;15886:7;15861:33;:::i;:::-;-1:-1:-1;;;;;15953:16:63;;;15941:29;;16018:4;16007:16;;15994:30;;16033:33;15994:30;16033:33;:::i;:::-;16098:16;16091:4;16082:14;;16075:40;16171:4;16160:16;;;16147:30;16131:14;;;16124:54;16234:4;16223:16;;;16210:30;16194:14;;;16187:54;16297:4;16286:16;;;16273:30;16257:14;;;16250:54;16347:55;16396:4;16385:16;;16164:5;16347:55;:::i;:::-;16434:4;16427;16422:3;16418:14;16411:28;16460:69;16523:4;16518:3;16514:14;16500:12;16486;16460:69;:::i;:::-;16448:81;;;16585:4;16578:5;16574:16;16561:30;16554:4;16549:3;16545:14;16538:54;16608:4;16601:11;;;15734:884;;;;:::o;16623:1048::-;16684:3;16712:6;16752:5;16739:19;16734:3;16727:32;16815:4;16808:5;16804:16;16791:30;16784:4;16779:3;16775:14;16768:54;16878:4;16871:5;16867:16;16854:30;16847:4;16842:3;16838:14;16831:54;16933:4;16926:5;16922:16;16909:30;16948:33;16973:7;16948:33;:::i;:::-;-1:-1:-1;;;;;17051:16:63;;;17044:4;17035:14;;17028:40;17116:4;17105:16;;17092:30;;17131:33;17092:30;17131:33;:::i;:::-;17196:16;17189:4;17180:14;;17173:40;17261:4;17250:16;;17237:30;17276:33;17237:30;17276:33;:::i;:::-;-1:-1:-1;;;;;14910:31:63;17355:4;17346:14;;14898:44;17404:55;17453:4;17442:16;;17446:5;17404:55;:::i;:::-;17491:2;17484:4;17479:3;17475:14;17468:26;17515:67;17578:2;17573:3;17569:12;17555;17541;17515:67;:::i;:::-;17503:79;;;;17638:4;17631:5;17627:16;17614:30;17607:4;17602:3;17598:14;17591:54;17661:4;17654:11;;;16623:1048;;;;:::o;17676:680::-;17740:3;17797:5;17784:19;17842:5;17826:14;17822:26;17903:3;17899:8;17895:2;17891:17;17871:18;17867:42;17857:70;;17923:1;17920;17913:12;17857:70;17948:4;17943:3;17936:17;17974:89;18057:4;18052:3;18048:14;18040:5;18020:18;18016:30;17974:89;:::i;:::-;17962:101;-1:-1:-1;18124:4:63;18113:16;;18100:30;-1:-1:-1;;18175:17:63;;18149:44;;18139:72;;18207:1;18204;18197:12;18139:72;18253:3;18247:4;18243:14;18236:4;18231:3;18227:14;18220:38;18274:76;18345:4;18337:5;18315:20;18311:32;18274:76;:::i;:::-;18267:83;17676:680;-1:-1:-1;;;;;;17676:680:63:o;18647:271::-;18830:6;18822;18817:3;18804:33;18786:3;18856:16;;18881:13;;;18856:16;18647:271;-1:-1:-1;18647:271:63:o;18923:274::-;19052:3;19090:6;19084:13;19106:53;19152:6;19147:3;19140:4;19132:6;19128:17;19106:53;:::i;:::-;19175:16;;;;;18923:274;-1:-1:-1;;18923:274:63:o;19202:940::-;19631:3;19669:6;19663:13;19685:53;19731:6;19726:3;19719:4;19711:6;19707:17;19685:53;:::i;:::-;-1:-1:-1;;;19760:16:63;;;19785:18;;;19828:13;;19850:65;19828:13;19902:1;19891:13;;19884:4;19872:17;;19850:65;:::i;:::-;-1:-1:-1;;;19978:1:63;19934:20;;;;19970:10;;;19963:23;20011:13;;20033:62;20011:13;20082:1;20074:10;;20067:4;20055:17;;20033:62;:::i;:::-;20115:17;20134:1;20111:25;;19202:940;-1:-1:-1;;;;;19202:940:63:o;20147:437::-;-1:-1:-1;;;20402:3:63;20395:35;20377:3;20459:6;20453:13;20475:62;20530:6;20525:2;20520:3;20516:12;20509:4;20501:6;20497:17;20475:62;:::i;:::-;20557:16;;;;20575:2;20553:25;;20147:437;-1:-1:-1;;20147:437:63:o;21395:668::-;-1:-1:-1;;;;;21754:15:63;;;21736:34;;21806:15;;;21801:2;21786:18;;21779:43;21858:15;;21853:2;21838:18;;21831:43;-1:-1:-1;;;;;;21910:33:63;;21905:2;21890:18;;21883:61;21685:3;21670:19;;21953:60;22008:3;21993:19;;21985:6;21953:60;:::i;:::-;22050:6;22044:3;22033:9;22029:19;22022:35;21395:668;;;;;;;;;:::o;22068:666::-;-1:-1:-1;;;;;22391:15:63;;;22373:34;;22443:15;;;22438:2;22423:18;;22416:43;22495:15;;22490:2;22475:18;;22468:43;-1:-1:-1;;;;;;22547:33:63;;22542:2;22527:18;;22520:61;22612:3;22597:19;;22590:35;;;22662:3;22353;22641:19;;22634:32;;;22316:4;;22683:45;;22708:19;;22700:6;22683:45;:::i;:::-;22675:53;22068:666;-1:-1:-1;;;;;;;;22068:666:63:o;23018:412::-;23260:1;23256;23251:3;23247:11;23243:19;23235:6;23231:32;23220:9;23213:51;23300:6;23295:2;23284:9;23280:18;23273:34;23343:2;23338;23327:9;23323:18;23316:30;23194:4;23363:61;23420:2;23409:9;23405:18;23397:6;23389;23363:61;:::i;23435:784::-;23663:2;23675:21;;;23648:18;;23731:22;;;23615:4;23810:6;23784:2;23769:18;;23615:4;23844:304;23858:6;23855:1;23852:13;23844:304;;;23933:6;23920:20;23953:31;23978:5;23953:31;:::i;:::-;-1:-1:-1;;;;;24009:31:63;23997:44;;24064:4;24123:15;;;;24088:12;;;;24037:1;23873:9;23844:304;;;-1:-1:-1;24199:4:63;24184:20;;;;24177:36;;;;-1:-1:-1;24165:3:63;23435:784;-1:-1:-1;;;23435:784:63:o;24416:485::-;24673:6;24666:14;24659:22;24648:9;24641:41;24718:6;24713:2;24702:9;24698:18;24691:34;24734:59;24789:2;24778:9;24774:18;24766:6;24734:59;:::i;:::-;24829:3;24824:2;24813:9;24809:18;24802:31;24622:4;24850:45;24890:3;24879:9;24875:19;24867:6;24850:45;:::i;26610:217::-;26757:2;26746:9;26739:21;26720:4;26777:44;26817:2;26806:9;26802:18;26794:6;26777:44;:::i;26832:589::-;27113:3;27102:9;27095:22;27076:4;27140:45;27180:3;27169:9;27165:19;27157:6;27140:45;:::i;:::-;27235:6;27228:14;27221:22;27216:2;27205:9;27201:18;27194:50;27280:6;27275:2;27264:9;27260:18;27253:34;27335:9;27327:6;27323:22;27318:2;27307:9;27303:18;27296:50;27363:52;27408:6;27400;27363:52;:::i;27656:331::-;27831:50;27871:9;27863:6;27831:50;:::i;:::-;27917:2;27912;27901:9;27897:18;27890:30;27812:4;27937:44;27977:2;27966:9;27962:18;27954:6;27937:44;:::i;27992:1340::-;28468:4;28497:3;28527:2;28516:9;28509:21;28553:61;28610:2;28599:9;28595:18;28587:6;28579;28553:61;:::i;:::-;28539:75;;28662:9;28654:6;28650:22;28645:2;28634:9;28630:18;28623:50;28696:55;28744:6;28736;28696:55;:::i;:::-;28682:69;;28799:9;28791:6;28787:22;28782:2;28771:9;28767:18;28760:50;28833:49;28875:6;28867;28859;28833:49;:::i;:::-;28819:63;;28930:9;28922:6;28918:22;28913:2;28902:9;28898:18;28891:50;28958:49;29000:6;28992;28984;28958:49;:::i;:::-;29044:13;;29038:3;29023:19;;29016:42;29113:2;29101:15;;29095:22;29089:3;29074:19;;29067:51;29173:2;29161:15;;29155:22;29149:3;29134:19;;29127:51;29233:2;29221:15;;;29215:22;29209:3;29194:19;;29187:51;-1:-1:-1;;29269:3:63;29254:19;;29247:35;;;;29313:3;29298:19;;;29291:35;28950:57;27992:1340;-1:-1:-1;;;;;;;27992:1340:63:o;29561:316::-;29738:2;29727:9;29720:21;29701:4;29758:44;29798:2;29787:9;29783:18;29775:6;29758:44;:::i;:::-;29750:52;;29867:1;29863;29858:3;29854:11;29850:19;29842:6;29838:32;29833:2;29822:9;29818:18;29811:60;29561:316;;;;;:::o;29882:290::-;30059:2;30048:9;30041:21;30022:4;30079:44;30119:2;30108:9;30104:18;30096:6;30079:44;:::i;:::-;30071:52;;30159:6;30154:2;30143:9;30139:18;30132:34;29882:290;;;;;:::o;30177:460::-;30410:3;30399:9;30392:22;30373:4;30431:45;30471:3;30460:9;30456:19;30448:6;30431:45;:::i;:::-;30507:2;30492:18;;30485:34;;;;-1:-1:-1;;;;;;30555:32:63;;;;30550:2;30535:18;;30528:60;30619:2;30604:18;;;30597:34;30423:53;30177:460;-1:-1:-1;30177:460:63:o;41982:782::-;42335:3;42324:9;42317:22;42298:4;42362:70;42427:3;42416:9;42412:19;42404:6;42362:70;:::i;:::-;42468:6;42463:2;42452:9;42448:18;42441:34;42511:6;42506:2;42495:9;42491:18;42484:34;42566:9;42558:6;42554:22;42549:2;42538:9;42534:18;42527:50;42600:32;42625:6;42617;42600:32;:::i;:::-;42586:46;;42681:9;42673:6;42669:22;42663:3;42652:9;42648:19;42641:51;42709:49;42751:6;42743;42735;42709:49;:::i;:::-;42701:57;41982:782;-1:-1:-1;;;;;;;;;41982:782:63:o;42769:919::-;42925:4;42967:3;42956:9;42952:19;42944:27;;43004:6;42998:13;42987:9;42980:32;43068:4;43060:6;43056:17;43050:24;43043:4;43032:9;43028:20;43021:54;43131:4;43123:6;43119:17;43113:24;43106:4;43095:9;43091:20;43084:54;43194:4;43186:6;43182:17;43176:24;43169:4;43158:9;43154:20;43147:54;43257:4;43249:6;43245:17;43239:24;43232:4;43221:9;43217:20;43210:54;43349:1;43345;43340:3;43336:11;43332:19;43324:4;43316:6;43312:17;43306:24;43302:50;43295:4;43284:9;43280:20;43273:80;43421:4;43413;43405:6;43401:17;43395:24;43391:35;43384:4;43373:9;43369:20;43362:65;43474:4;43466:6;43462:17;43456:24;43489:53;43536:4;43525:9;43521:20;43507:12;-1:-1:-1;;;;;18521:34:63;18509:47;;18456:106;43489:53;-1:-1:-1;43561:6:63;43604:15;;;43598:22;18437:6;18426:18;43663;;;;18414:31;42769:919;:::o;44670:731::-;45001:3;44990:9;44983:22;44964:4;45028:68;45091:3;45080:9;45076:19;45068:6;45028:68;:::i;:::-;45144:9;45136:6;45132:22;45127:2;45116:9;45112:18;45105:50;45178:49;45220:6;45212;45204;45178:49;:::i;:::-;45164:63;;45275:9;45267:6;45263:22;45258:2;45247:9;45243:18;45236:50;45303:49;45345:6;45337;45329;45303:49;:::i;:::-;45295:57;;;45388:6;45383:2;45372:9;45368:18;45361:34;44670:731;;;;;;;;;:::o;45588:521::-;45665:4;45671:6;45731:11;45718:25;45825:2;45821:7;45810:8;45794:14;45790:29;45786:43;45766:18;45762:68;45752:96;;45844:1;45841;45834:12;45752:96;45871:33;;45923:20;;;-1:-1:-1;;;;;;45955:30:63;;45952:50;;;45998:1;45995;45988:12;45952:50;46031:4;46019:17;;-1:-1:-1;46062:14:63;46058:27;;;46048:38;;46045:58;;;46099:1;46096;46089:12;46114:332;46214:4;46272:11;46259:25;46366:3;46362:8;46351;46335:14;46331:29;46327:44;46307:18;46303:69;46293:97;;46386:1;46383;46376:12;46451:327;46546:4;46604:11;46591:25;46698:3;46694:8;46683;46667:14;46663:29;46659:44;46639:18;46635:69;46625:97;;46718:1;46715;46708:12;46783:252;46855:2;46849:9;46897:3;46885:16;;-1:-1:-1;;;;;46916:34:63;;46952:22;;;46913:62;46910:88;;;46978:18;;:::i;:::-;47014:2;47007:22;46783:252;:::o;47040:253::-;47112:2;47106:9;47154:4;47142:17;;-1:-1:-1;;;;;47174:34:63;;47210:22;;;47171:62;47168:88;;;47236:18;;:::i;47298:275::-;47369:2;47363:9;47434:2;47415:13;;-1:-1:-1;;47411:27:63;47399:40;;-1:-1:-1;;;;;47454:34:63;;47490:22;;;47451:62;47448:88;;;47516:18;;:::i;:::-;47552:2;47545:22;47298:275;;-1:-1:-1;47298:275:63:o;47578:191::-;47646:4;-1:-1:-1;;;;;47671:6:63;47668:30;47665:56;;;47701:18;;:::i;:::-;-1:-1:-1;47746:1:63;47742:14;47758:4;47738:25;;47578:191::o;47774:503::-;47832:5;47839:6;47899:3;47886:17;47985:2;47981:7;47970:8;47954:14;47950:29;47946:43;47926:18;47922:68;47912:96;;48004:1;48001;47994:12;47912:96;48032:33;;48136:4;48123:18;;;-1:-1:-1;48084:21:63;;-1:-1:-1;;;;;;48153:30:63;;48150:50;;;48196:1;48193;48186:12;48150:50;48246:6;48230:14;48226:27;48216:8;48212:42;48209:62;;;48267:1;48264;48257:12;48282:224;48321:3;48349:6;48382:2;48379:1;48375:10;48412:2;48409:1;48405:10;48443:3;48439:2;48435:12;48430:3;48427:21;48424:47;;;48451:18;;:::i;:::-;48487:13;;48282:224;-1:-1:-1;;;;48282:224:63:o;48511:128::-;48551:3;48582:1;48578:6;48575:1;48572:13;48569:39;;;48588:18;;:::i;:::-;-1:-1:-1;48624:9:63;;48511:128::o;48644:217::-;48684:1;48710;48700:132;;48754:10;48749:3;48745:20;48742:1;48735:31;48789:4;48786:1;48779:15;48817:4;48814:1;48807:15;48700:132;-1:-1:-1;48846:9:63;;48644:217::o;48866:168::-;48906:7;48972:1;48968;48964:6;48960:14;48957:1;48954:21;48949:1;48942:9;48935:17;48931:45;48928:71;;;48979:18;;:::i;:::-;-1:-1:-1;49019:9:63;;48866:168::o;49039:125::-;49079:4;49107:1;49104;49101:8;49098:34;;;49112:18;;:::i;:::-;-1:-1:-1;49149:9:63;;49039:125::o;49169:258::-;49241:1;49251:113;49265:6;49262:1;49259:13;49251:113;;;49341:11;;;49335:18;49322:11;;;49315:39;49287:2;49280:10;49251:113;;;49382:6;49379:1;49376:13;49373:48;;;-1:-1:-1;;49417:1:63;49399:16;;49392:27;49169:258::o;49561:135::-;49600:3;-1:-1:-1;;49621:17:63;;49618:43;;;49641:18;;:::i;:::-;-1:-1:-1;49688:1:63;49677:13;;49561:135::o;49701:127::-;49762:10;49757:3;49753:20;49750:1;49743:31;49793:4;49790:1;49783:15;49817:4;49814:1;49807:15;49965:127;50026:10;50021:3;50017:20;50014:1;50007:31;50057:4;50054:1;50047:15;50081:4;50078:1;50071:15;50097:127;50158:10;50153:3;50149:20;50146:1;50139:31;50189:4;50186:1;50179:15;50213:4;50210:1;50203:15;50229:127;50290:10;50285:3;50281:20;50278:1;50271:31;50321:4;50318:1;50311:15;50345:4;50342:1;50335:15;50361:131;-1:-1:-1;;;;;50436:31:63;;50426:42;;50416:70;;50482:1;50479;50472:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable not-rely-on-time */\n/* solhint-disable avoid-tx-origin */\n/* solhint-disable bracket-align */\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"hardhat/console.sol\";\n\nimport \"./utils/MinLibBytes.sol\";\nimport \"@openzeppelin/contracts/utils/Address.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./utils/GsnUtils.sol\";\nimport \"./utils/GsnEip712Library.sol\";\nimport \"./utils/RelayHubValidator.sol\";\nimport \"./utils/GsnTypes.sol\";\nimport \"./interfaces/IRelayHub.sol\";\nimport \"./interfaces/IPaymaster.sol\";\nimport \"./forwarder/IForwarder.sol\";\nimport \"./interfaces/IStakeManager.sol\";\nimport \"./interfaces/IRelayRegistrar.sol\";\nimport \"./interfaces/IStakeManager.sol\";\n\n/**\n * @title The RelayHub Implementation\n * @notice This contract implements the `IRelayHub` interface for the EVM-compatible networks.\n */\ncontract RelayHub is IRelayHub, Ownable, ERC165 {\n    using ERC165Checker for address;\n    using Address for address;\n\n    address private constant DRY_RUN_ADDRESS = 0x0000000000000000000000000000000000000000;\n\n    /// @inheritdoc IRelayHub\n    function versionHub() override virtual public pure returns (string memory){\n        return \"3.0.0-beta.3+opengsn.hub.irelayhub\";\n    }\n\n    IStakeManager internal immutable stakeManager;\n    address internal immutable penalizer;\n    address internal immutable batchGateway;\n    address internal immutable relayRegistrar;\n\n    RelayHubConfig internal config;\n\n    /// @inheritdoc IRelayHub\n    function getConfiguration() public override view returns (RelayHubConfig memory) {\n        return config;\n    }\n\n    /// @inheritdoc IRelayHub\n    function setConfiguration(RelayHubConfig memory _config) public override onlyOwner {\n        require(_config.devFee < 100, \"dev fee too high\");\n        config = _config;\n        emit RelayHubConfigured(config);\n    }\n\n    // maps ERC-20 token address to a minimum stake for it\n    mapping(IERC20 => uint256) internal minimumStakePerToken;\n\n    /// @inheritdoc IRelayHub\n    function setMinimumStakes(IERC20[] memory token, uint256[] memory minimumStake) public override onlyOwner {\n        require(token.length == minimumStake.length, \"setMinimumStakes: wrong length\");\n        for (uint256 i = 0; i < token.length; i++) {\n            minimumStakePerToken[token[i]] = minimumStake[i];\n            emit StakingTokenDataChanged(address(token[i]), minimumStake[i]);\n        }\n    }\n\n    // maps relay worker's address to its manager's address\n    mapping(address => address) internal workerToManager;\n\n    // maps relay managers to the number of their workers\n    mapping(address => uint256) internal workerCount;\n\n    mapping(address => uint256) internal balances;\n\n    uint256 internal immutable creationBlock;\n    uint256 internal deprecationTime = type(uint256).max;\n\n    constructor (\n        IStakeManager _stakeManager,\n        address _penalizer,\n        address _batchGateway,\n        address _relayRegistrar,\n        RelayHubConfig memory _config\n    ) {\n        creationBlock = block.number;\n        stakeManager = _stakeManager;\n        penalizer = _penalizer;\n        batchGateway = _batchGateway;\n        relayRegistrar = _relayRegistrar;\n        setConfiguration(_config);\n    }\n\n    /// @inheritdoc IRelayHub\n    function getCreationBlock() external override virtual view returns (uint256){\n        return creationBlock;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getDeprecationTime() external override view returns (uint256) {\n        return deprecationTime;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getStakeManager() external override view returns (IStakeManager) {\n        return stakeManager;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getPenalizer() external override view returns (address) {\n        return penalizer;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getBatchGateway() external override view returns (address) {\n        return batchGateway;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getRelayRegistrar() external override view returns (address) {\n        return relayRegistrar;\n    }\n\n    /// @inheritdoc IRelayHub\n    function getMinimumStakePerToken(IERC20 token) external override view returns (uint256) {\n        return minimumStakePerToken[token];\n    }\n\n    /// @inheritdoc IRelayHub\n    function getWorkerManager(address worker) external override view returns (address) {\n        return workerToManager[worker];\n    }\n\n    /// @inheritdoc IRelayHub\n    function getWorkerCount(address manager) external override view returns (uint256) {\n        return workerCount[manager];\n    }\n\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {\n        return interfaceId == type(IRelayHub).interfaceId ||\n            interfaceId == type(Ownable).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /// @inheritdoc IRelayHub\n    function onRelayServerRegistered(address relayManager) external override {\n        require(msg.sender == relayRegistrar, \"caller is not relay registrar\");\n        verifyRelayManagerStaked(relayManager);\n        require(workerCount[relayManager] > 0, \"no relay workers\");\n        stakeManager.updateRelayKeepaliveTime(relayManager);\n    }\n\n    /// @inheritdoc IRelayHub\n    function addRelayWorkers(address[] calldata newRelayWorkers) external override {\n        address relayManager = msg.sender;\n        uint256 newWorkerCount = workerCount[relayManager] + newRelayWorkers.length;\n        workerCount[relayManager] = newWorkerCount;\n        require(newWorkerCount <= config.maxWorkerCount, \"too many workers\");\n\n        verifyRelayManagerStaked(relayManager);\n\n        for (uint256 i = 0; i < newRelayWorkers.length; i++) {\n            require(workerToManager[newRelayWorkers[i]] == address(0), \"this worker has a manager\");\n            workerToManager[newRelayWorkers[i]] = relayManager;\n        }\n\n        emit RelayWorkersAdded(relayManager, newRelayWorkers, newWorkerCount);\n    }\n\n    /// @inheritdoc IRelayHub\n    function depositFor(address target) public virtual override payable {\n        require(target.supportsInterface(type(IPaymaster).interfaceId), \"target is not a valid IPaymaster\");\n        uint256 amount = msg.value;\n\n        balances[target] = balances[target] + amount;\n\n        emit Deposited(target, msg.sender, amount);\n    }\n\n    /// @inheritdoc IRelayHub\n    function balanceOf(address target) external override view returns (uint256) {\n        return balances[target];\n    }\n\n    /// @inheritdoc IRelayHub\n    function withdraw(address payable dest, uint256 amount) public override {\n        uint256[] memory amounts = new uint256[](1);\n        address payable[] memory destinations = new address payable[](1);\n        amounts[0] = amount;\n        destinations[0] = dest;\n        withdrawMultiple(destinations, amounts);\n    }\n\n    /// @inheritdoc IRelayHub\n    function withdrawMultiple(address payable[] memory dest, uint256[] memory amount) public override {\n        address payable account = payable(msg.sender);\n        for (uint256 i = 0; i < amount.length; i++) {\n            console.log(\"withdrawMultiple %s %s %s\", balances[account], dest[i], amount[i]);\n            uint256 balance = balances[account];\n            require(balance >= amount[i], \"insufficient funds\");\n            balances[account] = balance - amount[i];\n            (bool success, ) = dest[i].call{value: amount[i]}(\"\");\n            require(success, \"Transfer failed.\");\n            emit Withdrawn(account, dest[i], amount[i]);\n        }\n    }\n\n    function verifyGasAndDataLimits(\n        uint256 maxAcceptanceBudget,\n        GsnTypes.RelayRequest calldata relayRequest,\n        uint256 initialGasLeft\n    )\n    private\n    view\n    returns (IPaymaster.GasAndDataLimits memory gasAndDataLimits, uint256 maxPossibleGas) {\n        gasAndDataLimits =\n            IPaymaster(relayRequest.relayData.paymaster).getGasAndDataLimits{gas:50000}();\n        require(msg.data.length <= gasAndDataLimits.calldataSizeLimit, \"msg.data exceeded limit\" );\n\n        require(maxAcceptanceBudget >= gasAndDataLimits.acceptanceBudget, \"acceptance budget too high\");\n        require(gasAndDataLimits.acceptanceBudget >= gasAndDataLimits.preRelayedCallGasLimit, \"acceptance budget too low\");\n\n        maxPossibleGas = relayRequest.relayData.transactionCalldataGasUsed + initialGasLeft;\n\n        uint256 maxPossibleCharge = calculateCharge(\n            maxPossibleGas,\n            relayRequest.relayData\n        );\n\n        // We don't yet know how much gas will be used by the recipient, so we make sure there are enough funds to pay\n        // for the maximum possible charge.\n        require(maxPossibleCharge <= balances[relayRequest.relayData.paymaster],\n            \"Paymaster balance too low\");\n    }\n\n    struct RelayCallData {\n        bool success;\n        bytes4 functionSelector;\n        uint256 initialGasLeft;\n        bytes recipientContext;\n        bytes relayedCallReturnValue;\n        IPaymaster.GasAndDataLimits gasAndDataLimits;\n        RelayCallStatus status;\n        uint256 innerGasUsed;\n        uint256 maxPossibleGas;\n        uint256 innerGasLimit;\n        uint256 gasBeforeInner;\n        uint256 gasUsed;\n        uint256 devCharge;\n        bytes retData;\n        address relayManager;\n        bytes32 relayRequestId;\n        uint256 tmpInitialGas;\n        bytes relayCallStatus;\n    }\n\n    /// @inheritdoc IRelayHub\n    function relayCall(\n        string calldata domainSeparatorName,\n        uint256 maxAcceptanceBudget,\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData\n    )\n    external\n    override\n    returns (\n        bool paymasterAccepted,\n        uint256 charge,\n        IRelayHub.RelayCallStatus status,\n        bytes memory returnValue)\n    {\n        RelayCallData memory vars;\n        vars.initialGasLeft = aggregateGasleft();\n        vars.relayRequestId = GsnUtils.getRelayRequestID(relayRequest, signature);\n\n        console.log(\"relayCall relayRequestId\");\n        console.logBytes32(vars.relayRequestId);\n        console.log(\"relayCall relayRequest.request.from\", relayRequest.request.from);\n        console.log(\"relayCall relayRequest.request.to\", relayRequest.request.to);\n        console.log(\"relayCall relayRequest.request.value\", relayRequest.request.value);\n        console.log(\"relayCall relayRequest.request.gas\", relayRequest.request.gas);\n        console.log(\"relayCall relayRequest.request.nonce\", relayRequest.request.nonce);\n        console.log(\"relayCall relayRequest.request.validUntilTime\", relayRequest.request.validUntilTime);\n\n        console.log(\"relayCall relayRequest.relayData.maxFeePerGas\", relayRequest.relayData.maxFeePerGas);\n        console.log(\"relayCall relayRequest.relayData.maxPriorityFeePerGas\", relayRequest.relayData.maxPriorityFeePerGas);\n        console.log(\"relayCall relayRequest.relayData.transactionCalldataGasUsed\", relayRequest.relayData.transactionCalldataGasUsed);\n        console.log(\"relayCall relayRequest.relayData.relayWorker\", relayRequest.relayData.relayWorker);\n        console.log(\"relayCall relayRequest.relayData.paymaster\", relayRequest.relayData.paymaster);\n        console.log(\"relayCall relayRequest.relayData.forwarder\", relayRequest.relayData.forwarder);\n        console.log(\"relayCall relayRequest.relayData.clientId\", relayRequest.relayData.clientId);\n\n        console.log(\"relayCall domainSeparatorName\");\n        console.logString(domainSeparatorName);\n        console.log(\"relayCall signature\");\n        console.logBytes(signature);\n        console.log(\"relayCall approvalData\");\n        console.logBytes(approvalData);\n        console.log(\"relayCall relayRequest.request.data\");\n        console.logBytes(relayRequest.request.data);\n        console.log(\"relayCall relayRequest.relayData.paymasterData\");\n        console.logBytes(relayRequest.relayData.paymasterData);\n        console.log(\"relayCall maxAcceptanceBudget\", maxAcceptanceBudget);\n\n        require(!isDeprecated(), \"hub deprecated\");\n        vars.functionSelector = relayRequest.request.data.length>=4 ? MinLibBytes.readBytes4(relayRequest.request.data, 0) : bytes4(0);\n\n        if (msg.sender != batchGateway && tx.origin != DRY_RUN_ADDRESS) {\n            require(signature.length != 0, \"missing signature or bad gateway\");\n            require(msg.sender == tx.origin, \"relay worker must be EOA\");\n            require(msg.sender == relayRequest.relayData.relayWorker, \"Not a right worker\");\n        }\n\n        if (tx.origin != DRY_RUN_ADDRESS) {\n            vars.relayManager = workerToManager[relayRequest.relayData.relayWorker];\n            require(vars.relayManager != address(0), \"Unknown relay worker\");\n            verifyRelayManagerStaked(vars.relayManager);\n        }\n\n        (vars.gasAndDataLimits, vars.maxPossibleGas) =\n            verifyGasAndDataLimits(maxAcceptanceBudget, relayRequest, vars.initialGasLeft);\n\n        RelayHubValidator.verifyTransactionPacking(domainSeparatorName,relayRequest,signature,approvalData);\n\n    {\n\n        //How much gas to pass down to innerRelayCall. must be lower than the default 63/64\n        // actually, min(gasleft*63/64, gasleft-GAS_RESERVE) might be enough.\n        vars.innerGasLimit = gasleft()*63/64- config.gasReserve;\n        vars.gasBeforeInner = aggregateGasleft();\n\n        /*\n        Preparing to calculate \"gasUseWithoutPost\":\n        MPG = calldataGasUsage + vars.initialGasLeft :: max possible gas, an approximate gas limit for the current transaction\n        GU1 = MPG - gasleft(called right before innerRelayCall) :: gas actually used by current transaction until that point\n        GU2 = innerGasLimit - gasleft(called inside the innerRelayCall just before preRelayedCall) :: gas actually used by innerRelayCall before calling postRelayCall\n        GWP1 = GU1 + GU2 :: gas actually used by the entire transaction before calling postRelayCall\n        TGO = config.gasOverhead + config.postOverhead :: extra that will be added to the charge to cover hidden costs\n        GWP = GWP1 + TGO :: transaction \"gas used without postRelayCall\"\n        */\n        vars.tmpInitialGas = relayRequest.relayData.transactionCalldataGasUsed + vars.initialGasLeft + vars.innerGasLimit + config.gasOverhead + config.postOverhead;\n        // Calls to the recipient are performed atomically inside an inner transaction which may revert in case of\n        // errors in the recipient. In either case (revert or regular execution) the return data encodes the\n        // RelayCallStatus value.\n        (vars.success, vars.relayCallStatus) = address(this).call{gas:vars.innerGasLimit}(\n            abi.encodeWithSelector(RelayHub.innerRelayCall.selector, domainSeparatorName, relayRequest, signature, approvalData, vars.gasAndDataLimits,\n            vars.tmpInitialGas - aggregateGasleft(), /* totalInitialGas */\n            vars.maxPossibleGas\n            )\n        );\n        vars.innerGasUsed = vars.gasBeforeInner-aggregateGasleft();\n        (vars.status, vars.relayedCallReturnValue) = abi.decode(vars.relayCallStatus, (RelayCallStatus, bytes));\n        if ( vars.relayedCallReturnValue.length>0 ) {\n            emit TransactionResult(vars.status, vars.relayedCallReturnValue);\n        }\n    }\n    {\n        if (!vars.success) {\n            //Failure cases where the PM doesn't pay\n            if (vars.status == RelayCallStatus.RejectedByPreRelayed ||\n                    (vars.innerGasUsed <= vars.gasAndDataLimits.acceptanceBudget + relayRequest.relayData.transactionCalldataGasUsed) && (\n                    vars.status == RelayCallStatus.RejectedByForwarder ||\n                    vars.status == RelayCallStatus.RejectedByRecipientRevert  //can only be thrown if rejectOnRecipientRevert==true\n                )) {\n                emit TransactionRejectedByPaymaster(\n                    vars.relayManager,\n                    relayRequest.relayData.paymaster,\n                    vars.relayRequestId,\n                    relayRequest.request.from,\n                    relayRequest.request.to,\n                    msg.sender,\n                    vars.functionSelector,\n                    vars.innerGasUsed,\n                    vars.relayedCallReturnValue);\n                return (false, 0, vars.status, vars.relayedCallReturnValue);\n            }\n        }\n\n        // We now perform the actual charge calculation, based on the measured gas used\n        vars.gasUsed = relayRequest.relayData.transactionCalldataGasUsed + (vars.initialGasLeft - aggregateGasleft()) + config.gasOverhead;\n        charge = calculateCharge(vars.gasUsed, relayRequest.relayData);\n        vars.devCharge = calculateDevCharge(charge);\n\n        balances[relayRequest.relayData.paymaster] = balances[relayRequest.relayData.paymaster] - charge;\n        balances[vars.relayManager] = balances[vars.relayManager] + (charge - vars.devCharge);\n        if (vars.devCharge > 0) { // save some gas in case of zero dev charge\n            balances[config.devAddress] = balances[config.devAddress] + vars.devCharge;\n        }\n\n        {\n            address from = relayRequest.request.from;\n            address to = relayRequest.request.to;\n            address paymaster = relayRequest.relayData.paymaster;\n            emit TransactionRelayed(\n                vars.relayManager,\n                msg.sender,\n                vars.relayRequestId,\n                from,\n                to,\n                paymaster,\n                vars.functionSelector,\n                vars.status,\n                charge);\n        }\n\n        // avoid variable size memory copying after gas calculation completed on-chain\n        if (tx.origin == DRY_RUN_ADDRESS) {\n            return (true, charge, vars.status, vars.relayedCallReturnValue);\n        }\n        return (true, charge, vars.status, \"\");\n    }\n    }\n\n    struct InnerRelayCallData {\n        uint256 initialGasLeft;\n        uint256 gasUsedToCallInner;\n        uint256 balanceBefore;\n        bytes32 preReturnValue;\n        bool relayedCallSuccess;\n        bytes relayedCallReturnValue;\n        bytes recipientContext;\n        bytes data;\n        bool rejectOnRecipientRevert;\n    }\n\n    /**\n     * @notice This method can only by called by this `RelayHub`.\n     * It wraps the execution of the `RelayRequest` in a revertable frame context.\n     */\n    function innerRelayCall(\n        string calldata domainSeparatorName,\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        IPaymaster.GasAndDataLimits calldata gasAndDataLimits,\n        uint256 totalInitialGas,\n        uint256 maxPossibleGas\n    )\n    external\n    returns (RelayCallStatus, bytes memory)\n    {\n        InnerRelayCallData memory vars;\n        vars.initialGasLeft = aggregateGasleft();\n        vars.gasUsedToCallInner = totalInitialGas - gasleft();\n        // A new gas measurement is performed inside innerRelayCall, since\n        // due to EIP150 available gas amounts cannot be directly compared across external calls\n\n        // This external function can only be called by RelayHub itself, creating an internal transaction. Calls to the\n        // recipient (preRelayedCall, the relayedCall, and postRelayedCall) are called from inside this transaction.\n        require(msg.sender == address(this), \"Must be called by RelayHub\");\n\n        // If either pre or post reverts, the whole internal transaction will be reverted, reverting all side effects on\n        // the recipient. The recipient will still be charged for the used gas by the relay.\n\n        // The paymaster is no allowed to withdraw balance from RelayHub during a relayed transaction. We check pre and\n        // post state to ensure this doesn't happen.\n        vars.balanceBefore = balances[relayRequest.relayData.paymaster];\n\n        // First preRelayedCall is executed.\n        // Note: we open a new block to avoid growing the stack too much.\n        vars.data = abi.encodeWithSelector(\n            IPaymaster.preRelayedCall.selector,\n            relayRequest, signature, approvalData, maxPossibleGas\n        );\n        {\n            bool success;\n            bytes memory retData;\n            (success, retData) = relayRequest.relayData.paymaster.call{gas:gasAndDataLimits.preRelayedCallGasLimit}(vars.data);\n            if (!success) {\n                GsnEip712Library.truncateInPlace(retData);\n                revertWithStatus(RelayCallStatus.RejectedByPreRelayed, retData);\n            }\n            (vars.recipientContext, vars.rejectOnRecipientRevert) = abi.decode(retData, (bytes,bool));\n        }\n\n        // The actual relayed call is now executed. The sender's address is appended at the end of the transaction data\n\n        {\n            bool forwarderSuccess;\n            (forwarderSuccess, vars.relayedCallSuccess, vars.relayedCallReturnValue) = GsnEip712Library.execute(domainSeparatorName, relayRequest, signature);\n            if ( !forwarderSuccess ) {\n                revertWithStatus(RelayCallStatus.RejectedByForwarder, vars.relayedCallReturnValue);\n            }\n\n            if (vars.rejectOnRecipientRevert && !vars.relayedCallSuccess) {\n                // we trusted the recipient, but it reverted...\n                revertWithStatus(RelayCallStatus.RejectedByRecipientRevert, vars.relayedCallReturnValue);\n            }\n        }\n        // Finally, postRelayedCall is executed, with the relayedCall execution's status and a charge estimate\n        // We now determine how much the recipient will be charged, to pass this value to postRelayedCall for accurate\n        // accounting.\n        vars.data = abi.encodeWithSelector(\n            IPaymaster.postRelayedCall.selector,\n            vars.recipientContext,\n            vars.relayedCallSuccess,\n            vars.gasUsedToCallInner + (vars.initialGasLeft - aggregateGasleft()), /*gasUseWithoutPost*/\n            relayRequest.relayData\n        );\n\n        {\n        (bool successPost,bytes memory ret) = relayRequest.relayData.paymaster.call{gas:gasAndDataLimits.postRelayedCallGasLimit}(vars.data);\n\n            if (!successPost) {\n                revertWithStatus(RelayCallStatus.PostRelayedFailed, ret);\n            }\n        }\n\n        if (balances[relayRequest.relayData.paymaster] < vars.balanceBefore) {\n            revertWithStatus(RelayCallStatus.PaymasterBalanceChanged, \"\");\n        }\n\n        return (vars.relayedCallSuccess ? RelayCallStatus.OK : RelayCallStatus.RelayedCallFailed, vars.relayedCallReturnValue);\n    }\n\n    /**\n     * @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)\n     */\n    function revertWithStatus(RelayCallStatus status, bytes memory ret) private pure {\n        bytes memory data = abi.encode(status, ret);\n        GsnEip712Library.truncateInPlace(data);\n\n        assembly {\n            let dataSize := mload(data)\n            let dataPtr := add(data, 32)\n\n            revert(dataPtr, dataSize)\n        }\n    }\n\n    /// @inheritdoc IRelayHub\n    function calculateDevCharge(uint256 charge) public override virtual view returns (uint256){\n        if (config.devFee == 0){ // save some gas in case of zero dev charge\n            return 0;\n        }\n        unchecked {\n        return charge * config.devFee / 100;\n        }\n    }\n\n    /// @inheritdoc IRelayHub\n    function calculateCharge(uint256 gasUsed, GsnTypes.RelayData calldata relayData) public override virtual view returns (uint256) {\n        uint256 basefee;\n        if (relayData.maxFeePerGas == relayData.maxPriorityFeePerGas) {\n            basefee = 0;\n        } else {\n            basefee = block.basefee;\n        }\n        uint256 chargeableGasPrice = Math.min(relayData.maxFeePerGas, Math.min(tx.gasprice, basefee + relayData.maxPriorityFeePerGas));\n        return config.baseRelayFee + (gasUsed * chargeableGasPrice * (config.pctRelayFee + 100)) / 100;\n    }\n\n    /// @inheritdoc IRelayHub\n    function verifyRelayManagerStaked(address relayManager) public override view {\n        (IStakeManager.StakeInfo memory info, bool isHubAuthorized) = stakeManager.getStakeInfo(relayManager);\n        uint256 minimumStake = minimumStakePerToken[info.token];\n        require(info.token != IERC20(address(0)), \"relay manager not staked\");\n        require(info.stake >= minimumStake, \"stake amount is too small\");\n        require(minimumStake != 0, \"staking this token is forbidden\");\n        require(info.unstakeDelay >= config.minimumUnstakeDelay, \"unstake delay is too small\");\n        require(info.withdrawTime == 0, \"stake has been withdrawn\");\n        require(isHubAuthorized, \"this hub is not authorized by SM\");\n    }\n\n    /// @inheritdoc IRelayHub\n    function deprecateHub(uint256 _deprecationTime) public override onlyOwner {\n        require(!isDeprecated(), \"Already deprecated\");\n        deprecationTime = _deprecationTime;\n        emit HubDeprecated(deprecationTime);\n    }\n\n    /// @inheritdoc IRelayHub\n    function isDeprecated() public override view returns (bool) {\n        return block.timestamp >= deprecationTime;\n    }\n\n    /// @notice Prevents any address other than the `Penalizer` from calling this method.\n    modifier penalizerOnly () {\n        require(msg.sender == penalizer, \"Not penalizer\");\n        _;\n    }\n\n    /// @inheritdoc IRelayHub\n    function penalize(address relayWorker, address payable beneficiary) external override penalizerOnly {\n        address relayManager = workerToManager[relayWorker];\n        // The worker must be controlled by a manager with a locked stake\n        require(relayManager != address(0), \"Unknown relay worker\");\n        (IStakeManager.StakeInfo memory stakeInfo,) = stakeManager.getStakeInfo(relayManager);\n        require(stakeInfo.stake > 0, \"relay manager not staked\");\n        stakeManager.penalizeRelayManager(relayManager, beneficiary, stakeInfo.stake);\n    }\n\n    /// @inheritdoc IRelayHub\n    function isRelayEscheatable(address relayManager) public view override returns (bool){\n        return stakeManager.isRelayEscheatable(relayManager);\n    }\n\n    /// @inheritdoc IRelayHub\n    function escheatAbandonedRelayBalance(address relayManager) external override onlyOwner {\n        require(stakeManager.isRelayEscheatable(relayManager), \"relay server not escheatable yet\");\n        uint256 balance = balances[relayManager];\n        balances[relayManager] = 0;\n        balances[config.devAddress] = balances[config.devAddress] + balance;\n        emit AbandonedRelayManagerBalanceEscheated(relayManager, balance);\n    }\n\n    /// @inheritdoc IRelayHub\n    function aggregateGasleft() public override virtual view returns (uint256){\n        return gasleft();\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "console": [
                20920
            ]
        },
        "id": 3331,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 1179,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:4"
            },
            {
                "id": 1180,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:4"
            },
            {
                "absolutePath": "hardhat/console.sol",
                "file": "hardhat/console.sol",
                "id": 1181,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 20921,
                "src": "285:29:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol",
                "file": "./utils/MinLibBytes.sol",
                "id": 1182,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8688,
                "src": "316:33:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
                "file": "@openzeppelin/contracts/utils/Address.sol",
                "id": 1183,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 11487,
                "src": "350:51:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 1184,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12147,
                "src": "402:64:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
                "id": 1185,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12341,
                "src": "467:71:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
                "file": "@openzeppelin/contracts/utils/math/Math.sol",
                "id": 1186,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12857,
                "src": "539:53:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 1187,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 10183,
                "src": "593:52:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "id": 1188,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 10850,
                "src": "646:56:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 1189,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8573,
                "src": "704:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol",
                "file": "./utils/GsnEip712Library.sol",
                "id": 1190,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8465,
                "src": "735:38:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/RelayHubValidator.sol",
                "file": "./utils/RelayHubValidator.sol",
                "id": 1191,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 9500,
                "src": "774:39:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol",
                "file": "./utils/GsnTypes.sol",
                "id": 1192,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8493,
                "src": "814:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 1193,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5897,
                "src": "845:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol",
                "file": "./interfaces/IPaymaster.sol",
                "id": 1194,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5448,
                "src": "882:37:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "./forwarder/IForwarder.sol",
                "id": 1195,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5130,
                "src": "920:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1196,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 6285,
                "src": "957:40:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayRegistrar.sol",
                "file": "./interfaces/IRelayRegistrar.sol",
                "id": 1197,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5995,
                "src": "998:42:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1198,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 6285,
                "src": "1041:40:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 1200,
                            "name": "IRelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5896,
                            "src": "1245:9:4"
                        },
                        "id": 1201,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1245:9:4"
                    },
                    {
                        "baseName": {
                            "id": 1202,
                            "name": "Ownable",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10182,
                            "src": "1256:7:4"
                        },
                        "id": 1203,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1256:7:4"
                    },
                    {
                        "baseName": {
                            "id": 1204,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "1265:6:4"
                        },
                        "id": 1205,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1265:6:4"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 1199,
                    "nodeType": "StructuredDocumentation",
                    "src": "1083:140:4",
                    "text": " @title The RelayHub Implementation\n @notice This contract implements the `IRelayHub` interface for the EVM-compatible networks."
                },
                "fullyImplemented": true,
                "id": 3330,
                "linearizedBaseContracts": [
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "RelayHub",
                "nameLocation": "1233:8:4",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 1208,
                        "libraryName": {
                            "id": 1206,
                            "name": "ERC165Checker",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12340,
                            "src": "1284:13:4"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1278:32:4",
                        "typeName": {
                            "id": 1207,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1302:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "id": 1211,
                        "libraryName": {
                            "id": 1209,
                            "name": "Address",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 11486,
                            "src": "1321:7:4"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1315:26:4",
                        "typeName": {
                            "id": 1210,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1333:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 1214,
                        "mutability": "constant",
                        "name": "DRY_RUN_ADDRESS",
                        "nameLocation": "1372:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1347:85:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1212,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1347:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": {
                            "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030303030",
                            "id": 1213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1390:42:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            },
                            "value": "0x0000000000000000000000000000000000000000"
                        },
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            5889
                        ],
                        "body": {
                            "id": 1223,
                            "nodeType": "Block",
                            "src": "1543:60:4",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562",
                                        "id": 1221,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1560:36:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_2f01acb386ab446760835d5e6820a3c7ca96af0beb7ba86de4b6be4cd0ee1f5a",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.hub.irelayhub\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.hub.irelayhub"
                                    },
                                    "functionReturnParameters": 1220,
                                    "id": 1222,
                                    "nodeType": "Return",
                                    "src": "1553:43:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1215,
                            "nodeType": "StructuredDocumentation",
                            "src": "1439:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d904c732",
                        "id": 1224,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "1478:10:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1217,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1491:8:4"
                        },
                        "parameters": {
                            "id": 1216,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1488:2:4"
                        },
                        "returnParameters": {
                            "id": 1220,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1219,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1224,
                                    "src": "1529:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 1218,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1529:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1528:15:4"
                        },
                        "scope": 3330,
                        "src": "1469:134:4",
                        "stateMutability": "pure",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1227,
                        "mutability": "immutable",
                        "name": "stakeManager",
                        "nameLocation": "1642:12:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1609:45:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                            "typeString": "contract IStakeManager"
                        },
                        "typeName": {
                            "id": 1226,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 1225,
                                "name": "IStakeManager",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 6284,
                                "src": "1609:13:4"
                            },
                            "referencedDeclaration": 6284,
                            "src": "1609:13:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1229,
                        "mutability": "immutable",
                        "name": "penalizer",
                        "nameLocation": "1687:9:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1660:36:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1228,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1660:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1231,
                        "mutability": "immutable",
                        "name": "batchGateway",
                        "nameLocation": "1729:12:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1702:39:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1230,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1702:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1233,
                        "mutability": "immutable",
                        "name": "relayRegistrar",
                        "nameLocation": "1774:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1747:41:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1232,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1747:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1236,
                        "mutability": "mutable",
                        "name": "config",
                        "nameLocation": "1819:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1795:30:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                            "typeString": "struct IRelayHub.RelayHubConfig"
                        },
                        "typeName": {
                            "id": 1235,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 1234,
                                "name": "RelayHubConfig",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 5556,
                                "src": "1795:14:4"
                            },
                            "referencedDeclaration": 5556,
                            "src": "1795:14:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                "typeString": "struct IRelayHub.RelayHubConfig"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5793
                        ],
                        "body": {
                            "id": 1246,
                            "nodeType": "Block",
                            "src": "1943:30:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1244,
                                        "name": "config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1236,
                                        "src": "1960:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 1243,
                                    "id": 1245,
                                    "nodeType": "Return",
                                    "src": "1953:13:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1237,
                            "nodeType": "StructuredDocumentation",
                            "src": "1832:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "6bd50cef",
                        "id": 1247,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getConfiguration",
                        "nameLocation": "1871:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1239,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1897:8:4"
                        },
                        "parameters": {
                            "id": 1238,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1887:2:4"
                        },
                        "returnParameters": {
                            "id": 1243,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1242,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1247,
                                    "src": "1920:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1241,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1240,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "1920:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "1920:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1919:23:4"
                        },
                        "scope": 3330,
                        "src": "1862:111:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5744
                        ],
                        "body": {
                            "id": 1273,
                            "nodeType": "Block",
                            "src": "2092:133:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                "id": 1261,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1258,
                                                        "name": "_config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1251,
                                                        "src": "2110:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                        }
                                                    },
                                                    "id": 1259,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devFee",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5551,
                                                    "src": "2110:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<",
                                                "rightExpression": {
                                                    "hexValue": "313030",
                                                    "id": 1260,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2127:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_100_by_1",
                                                        "typeString": "int_const 100"
                                                    },
                                                    "value": "100"
                                                },
                                                "src": "2110:20:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6465762066656520746f6f2068696768",
                                                "id": 1262,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2132:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_dfd55192e8ce75cdc887b92eb1de30c17a86ec0f1051a64542af244536f106b6",
                                                    "typeString": "literal_string \"dev fee too high\""
                                                },
                                                "value": "dev fee too high"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_dfd55192e8ce75cdc887b92eb1de30c17a86ec0f1051a64542af244536f106b6",
                                                    "typeString": "literal_string \"dev fee too high\""
                                                }
                                            ],
                                            "id": 1257,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2102:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1263,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2102:49:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1264,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2102:49:4"
                                },
                                {
                                    "expression": {
                                        "id": 1267,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1265,
                                            "name": "config",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1236,
                                            "src": "2161:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1266,
                                            "name": "_config",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1251,
                                            "src": "2170:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                "typeString": "struct IRelayHub.RelayHubConfig memory"
                                            }
                                        },
                                        "src": "2161:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                        }
                                    },
                                    "id": 1268,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2161:16:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1270,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "2211:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            ],
                                            "id": 1269,
                                            "name": "RelayHubConfigured",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5562,
                                            "src": "2192:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_struct$_RelayHubConfig_$5556_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IRelayHub.RelayHubConfig memory)"
                                            }
                                        },
                                        "id": 1271,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2192:26:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1272,
                                    "nodeType": "EmitStatement",
                                    "src": "2187:31:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1248,
                            "nodeType": "StructuredDocumentation",
                            "src": "1979:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "9bcde3f3",
                        "id": 1274,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 1255,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 1254,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "2082:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2082:9:4"
                            }
                        ],
                        "name": "setConfiguration",
                        "nameLocation": "2018:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1253,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2073:8:4"
                        },
                        "parameters": {
                            "id": 1252,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1251,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "2057:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1274,
                                    "src": "2035:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1250,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1249,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "2035:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "2035:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2034:31:4"
                        },
                        "returnParameters": {
                            "id": 1256,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2092:0:4"
                        },
                        "scope": 3330,
                        "src": "2009:216:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1279,
                        "mutability": "mutable",
                        "name": "minimumStakePerToken",
                        "nameLocation": "2326:20:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2290:56:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20 => uint256)"
                        },
                        "typeName": {
                            "id": 1278,
                            "keyType": {
                                "id": 1276,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                    "id": 1275,
                                    "name": "IERC20",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10849,
                                    "src": "2298:6:4"
                                },
                                "referencedDeclaration": 10849,
                                "src": "2298:6:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                    "typeString": "contract IERC20"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2290:26:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                "typeString": "mapping(contract IERC20 => uint256)"
                            },
                            "valueType": {
                                "id": 1277,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2308:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5755
                        ],
                        "body": {
                            "id": 1337,
                            "nodeType": "Block",
                            "src": "2489:298:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1298,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1294,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1284,
                                                        "src": "2507:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                            "typeString": "contract IERC20[] memory"
                                                        }
                                                    },
                                                    "id": 1295,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2507:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1296,
                                                        "name": "minimumStake",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1287,
                                                        "src": "2523:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                            "typeString": "uint256[] memory"
                                                        }
                                                    },
                                                    "id": 1297,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2523:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2507:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7365744d696e696d756d5374616b65733a2077726f6e67206c656e677468",
                                                "id": 1299,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2544:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_7035043b10a148d28fdcfdff445e85bde7925a5feaf15781a1ac8dee5cc12f76",
                                                    "typeString": "literal_string \"setMinimumStakes: wrong length\""
                                                },
                                                "value": "setMinimumStakes: wrong length"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_7035043b10a148d28fdcfdff445e85bde7925a5feaf15781a1ac8dee5cc12f76",
                                                    "typeString": "literal_string \"setMinimumStakes: wrong length\""
                                                }
                                            ],
                                            "id": 1293,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2499:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1300,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2499:78:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1301,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2499:78:4"
                                },
                                {
                                    "body": {
                                        "id": 1335,
                                        "nodeType": "Block",
                                        "src": "2630:151:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 1321,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1313,
                                                            "name": "minimumStakePerToken",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1279,
                                                            "src": "2644:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                                "typeString": "mapping(contract IERC20 => uint256)"
                                                            }
                                                        },
                                                        "id": 1317,
                                                        "indexExpression": {
                                                            "baseExpression": {
                                                                "id": 1314,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1284,
                                                                "src": "2665:5:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                                    "typeString": "contract IERC20[] memory"
                                                                }
                                                            },
                                                            "id": 1316,
                                                            "indexExpression": {
                                                                "id": 1315,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1303,
                                                                "src": "2671:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "2665:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                "typeString": "contract IERC20"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "2644:30:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "baseExpression": {
                                                            "id": 1318,
                                                            "name": "minimumStake",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1287,
                                                            "src": "2677:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                "typeString": "uint256[] memory"
                                                            }
                                                        },
                                                        "id": 1320,
                                                        "indexExpression": {
                                                            "id": 1319,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1303,
                                                            "src": "2690:1:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "2677:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2644:48:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1322,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2644:48:4"
                                            },
                                            {
                                                "eventCall": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "baseExpression": {
                                                                        "id": 1326,
                                                                        "name": "token",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1284,
                                                                        "src": "2743:5:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                                            "typeString": "contract IERC20[] memory"
                                                                        }
                                                                    },
                                                                    "id": 1328,
                                                                    "indexExpression": {
                                                                        "id": 1327,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1303,
                                                                        "src": "2749:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "2743:8:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                        "typeString": "contract IERC20"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                        "typeString": "contract IERC20"
                                                                    }
                                                                ],
                                                                "id": 1325,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2735:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 1324,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2735:7:4",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 1329,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2735:17:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1330,
                                                                "name": "minimumStake",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1287,
                                                                "src": "2754:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1332,
                                                            "indexExpression": {
                                                                "id": 1331,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1303,
                                                                "src": "2767:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "2754:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 1323,
                                                        "name": "StakingTokenDataChanged",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5597,
                                                        "src": "2711:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (address,uint256)"
                                                        }
                                                    },
                                                    "id": 1333,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2711:59:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1334,
                                                "nodeType": "EmitStatement",
                                                "src": "2706:64:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1309,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1306,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1303,
                                            "src": "2607:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1307,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1284,
                                                "src": "2611:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                    "typeString": "contract IERC20[] memory"
                                                }
                                            },
                                            "id": 1308,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "2611:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2607:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1336,
                                    "initializationExpression": {
                                        "assignments": [
                                            1303
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1303,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "2600:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1336,
                                                "src": "2592:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1302,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2592:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1305,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1304,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2604:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "2592:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1311,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "2625:3:4",
                                            "subExpression": {
                                                "id": 1310,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1303,
                                                "src": "2625:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1312,
                                        "nodeType": "ExpressionStatement",
                                        "src": "2625:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "2587:194:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1280,
                            "nodeType": "StructuredDocumentation",
                            "src": "2353:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8a09fb56",
                        "id": 1338,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 1291,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 1290,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "2479:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2479:9:4"
                            }
                        ],
                        "name": "setMinimumStakes",
                        "nameLocation": "2392:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1289,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2470:8:4"
                        },
                        "parameters": {
                            "id": 1288,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1284,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "2425:5:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1338,
                                    "src": "2409:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                        "typeString": "contract IERC20[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1282,
                                            "nodeType": "UserDefinedTypeName",
                                            "pathNode": {
                                                "id": 1281,
                                                "name": "IERC20",
                                                "nodeType": "IdentifierPath",
                                                "referencedDeclaration": 10849,
                                                "src": "2409:6:4"
                                            },
                                            "referencedDeclaration": 10849,
                                            "src": "2409:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "id": 1283,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2409:8:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_storage_ptr",
                                            "typeString": "contract IERC20[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1287,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "2449:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1338,
                                    "src": "2432:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1285,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2432:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1286,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2432:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2408:54:4"
                        },
                        "returnParameters": {
                            "id": 1292,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2489:0:4"
                        },
                        "scope": 3330,
                        "src": "2383:404:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1342,
                        "mutability": "mutable",
                        "name": "workerToManager",
                        "nameLocation": "2890:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2853:52:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                        },
                        "typeName": {
                            "id": 1341,
                            "keyType": {
                                "id": 1339,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2861:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2853:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                                "id": 1340,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2872:7:4",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1346,
                        "mutability": "mutable",
                        "name": "workerCount",
                        "nameLocation": "3007:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2970:48:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 1345,
                            "keyType": {
                                "id": 1343,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2978:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2970:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 1344,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2989:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1350,
                        "mutability": "mutable",
                        "name": "balances",
                        "nameLocation": "3062:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3025:45:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 1349,
                            "keyType": {
                                "id": 1347,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3033:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "3025:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 1348,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3044:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1352,
                        "mutability": "immutable",
                        "name": "creationBlock",
                        "nameLocation": "3104:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3077:40:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1351,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3077:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1359,
                        "mutability": "mutable",
                        "name": "deprecationTime",
                        "nameLocation": "3140:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3123:52:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1353,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3123:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": {
                            "expression": {
                                "arguments": [
                                    {
                                        "id": 1356,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "3163:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                            "id": 1355,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "3163:7:4",
                                            "typeDescriptions": {}
                                        }
                                    }
                                ],
                                "expression": {
                                    "argumentTypes": [
                                        {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                        }
                                    ],
                                    "id": 1354,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967269,
                                    "src": "3158:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                    }
                                },
                                "id": 1357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3158:13:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                }
                            },
                            "id": 1358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3158:17:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1399,
                            "nodeType": "Block",
                            "src": "3369:230:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1377,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1374,
                                            "name": "creationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1352,
                                            "src": "3379:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 1375,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "3395:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 1376,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "number",
                                            "nodeType": "MemberAccess",
                                            "src": "3395:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3379:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1378,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3379:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1381,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1379,
                                            "name": "stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1227,
                                            "src": "3417:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1380,
                                            "name": "_stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1362,
                                            "src": "3432:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "src": "3417:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "id": 1382,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3417:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1385,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1383,
                                            "name": "penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1229,
                                            "src": "3455:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1384,
                                            "name": "_penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1364,
                                            "src": "3467:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3455:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1386,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3455:22:4"
                                },
                                {
                                    "expression": {
                                        "id": 1389,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1387,
                                            "name": "batchGateway",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1231,
                                            "src": "3487:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1388,
                                            "name": "_batchGateway",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1366,
                                            "src": "3502:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3487:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1390,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3487:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1391,
                                            "name": "relayRegistrar",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1233,
                                            "src": "3525:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1392,
                                            "name": "_relayRegistrar",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1368,
                                            "src": "3542:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3525:32:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1394,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3525:32:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1396,
                                                "name": "_config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1371,
                                                "src": "3584:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                    "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                    "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                }
                                            ],
                                            "id": 1395,
                                            "name": "setConfiguration",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1274,
                                            "src": "3567:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RelayHubConfig_$5556_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IRelayHub.RelayHubConfig memory)"
                                            }
                                        },
                                        "id": 1397,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3567:25:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1398,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3567:25:4"
                                }
                            ]
                        },
                        "id": 1400,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1372,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1362,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "3218:13:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3204:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 1361,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1360,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "3204:13:4"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "3204:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1364,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "3249:10:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3241:18:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1363,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3241:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1366,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "3277:13:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3269:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1365,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3269:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1368,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "3308:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3300:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1367,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3300:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1371,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "3355:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3333:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1370,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1369,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "3333:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "3333:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3194:174:4"
                        },
                        "returnParameters": {
                            "id": 1373,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3369:0:4"
                        },
                        "scope": 3330,
                        "src": "3182:417:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5883
                        ],
                        "body": {
                            "id": 1409,
                            "nodeType": "Block",
                            "src": "3711:37:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1407,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1352,
                                        "src": "3728:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1406,
                                    "id": 1408,
                                    "nodeType": "Return",
                                    "src": "3721:20:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1401,
                            "nodeType": "StructuredDocumentation",
                            "src": "3605:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "20ffd56d",
                        "id": 1410,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "3644:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1403,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3672:8:4"
                        },
                        "parameters": {
                            "id": 1402,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3660:2:4"
                        },
                        "returnParameters": {
                            "id": 1406,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1405,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1410,
                                    "src": "3703:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1404,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3703:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3702:9:4"
                        },
                        "scope": 3330,
                        "src": "3635:113:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5877
                        ],
                        "body": {
                            "id": 1419,
                            "nodeType": "Block",
                            "src": "3855:39:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1417,
                                        "name": "deprecationTime",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1359,
                                        "src": "3872:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1416,
                                    "id": 1418,
                                    "nodeType": "Return",
                                    "src": "3865:22:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1411,
                            "nodeType": "StructuredDocumentation",
                            "src": "3754:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "3c16e59a",
                        "id": 1420,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getDeprecationTime",
                        "nameLocation": "3793:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1413,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3823:8:4"
                        },
                        "parameters": {
                            "id": 1412,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3811:2:4"
                        },
                        "returnParameters": {
                            "id": 1416,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1415,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1420,
                                    "src": "3846:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1414,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3846:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3845:9:4"
                        },
                        "scope": 3330,
                        "src": "3784:110:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5833
                        ],
                        "body": {
                            "id": 1430,
                            "nodeType": "Block",
                            "src": "4004:36:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1428,
                                        "name": "stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1227,
                                        "src": "4021:12:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "functionReturnParameters": 1427,
                                    "id": 1429,
                                    "nodeType": "Return",
                                    "src": "4014:19:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1421,
                            "nodeType": "StructuredDocumentation",
                            "src": "3900:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ca64f9e7",
                        "id": 1431,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeManager",
                        "nameLocation": "3939:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1423,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3966:8:4"
                        },
                        "parameters": {
                            "id": 1422,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3954:2:4"
                        },
                        "returnParameters": {
                            "id": 1427,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1426,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1431,
                                    "src": "3989:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 1425,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1424,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "3989:13:4"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "3989:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3988:15:4"
                        },
                        "scope": 3330,
                        "src": "3930:110:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5839
                        ],
                        "body": {
                            "id": 1440,
                            "nodeType": "Block",
                            "src": "4141:33:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1438,
                                        "name": "penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1229,
                                        "src": "4158:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1437,
                                    "id": 1439,
                                    "nodeType": "Return",
                                    "src": "4151:16:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1432,
                            "nodeType": "StructuredDocumentation",
                            "src": "4046:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "75dc7b4e",
                        "id": 1441,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizer",
                        "nameLocation": "4085:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1434,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4109:8:4"
                        },
                        "parameters": {
                            "id": 1433,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4097:2:4"
                        },
                        "returnParameters": {
                            "id": 1437,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1436,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1441,
                                    "src": "4132:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1435,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4132:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4131:9:4"
                        },
                        "scope": 3330,
                        "src": "4076:98:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5851
                        ],
                        "body": {
                            "id": 1450,
                            "nodeType": "Block",
                            "src": "4278:36:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1448,
                                        "name": "batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1231,
                                        "src": "4295:12:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1447,
                                    "id": 1449,
                                    "nodeType": "Return",
                                    "src": "4288:19:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1442,
                            "nodeType": "StructuredDocumentation",
                            "src": "4180:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "f7908a74",
                        "id": 1451,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBatchGateway",
                        "nameLocation": "4219:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1444,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4246:8:4"
                        },
                        "parameters": {
                            "id": 1443,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4234:2:4"
                        },
                        "returnParameters": {
                            "id": 1447,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1446,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1451,
                                    "src": "4269:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1445,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4269:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4268:9:4"
                        },
                        "scope": 3330,
                        "src": "4210:104:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5845
                        ],
                        "body": {
                            "id": 1460,
                            "nodeType": "Block",
                            "src": "4420:38:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1458,
                                        "name": "relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1233,
                                        "src": "4437:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1457,
                                    "id": 1459,
                                    "nodeType": "Return",
                                    "src": "4430:21:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1452,
                            "nodeType": "StructuredDocumentation",
                            "src": "4320:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "51d85156",
                        "id": 1461,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getRelayRegistrar",
                        "nameLocation": "4359:17:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1454,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4388:8:4"
                        },
                        "parameters": {
                            "id": 1453,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4376:2:4"
                        },
                        "returnParameters": {
                            "id": 1457,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1456,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1461,
                                    "src": "4411:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1455,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4411:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4410:9:4"
                        },
                        "scope": 3330,
                        "src": "4350:108:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5802
                        ],
                        "body": {
                            "id": 1475,
                            "nodeType": "Block",
                            "src": "4582:51:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1471,
                                            "name": "minimumStakePerToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1279,
                                            "src": "4599:20:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                "typeString": "mapping(contract IERC20 => uint256)"
                                            }
                                        },
                                        "id": 1473,
                                        "indexExpression": {
                                            "id": 1472,
                                            "name": "token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1465,
                                            "src": "4620:5:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4599:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1470,
                                    "id": 1474,
                                    "nodeType": "Return",
                                    "src": "4592:34:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1462,
                            "nodeType": "StructuredDocumentation",
                            "src": "4464:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ddf73789",
                        "id": 1476,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMinimumStakePerToken",
                        "nameLocation": "4503:23:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1467,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4550:8:4"
                        },
                        "parameters": {
                            "id": 1466,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1465,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "4534:5:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1476,
                                    "src": "4527:12:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 1464,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1463,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "4527:6:4"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "4527:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4526:14:4"
                        },
                        "returnParameters": {
                            "id": 1470,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1469,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1476,
                                    "src": "4573:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1468,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4573:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4572:9:4"
                        },
                        "scope": 3330,
                        "src": "4494:139:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5810
                        ],
                        "body": {
                            "id": 1489,
                            "nodeType": "Block",
                            "src": "4752:47:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1485,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1342,
                                            "src": "4769:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 1487,
                                        "indexExpression": {
                                            "id": 1486,
                                            "name": "worker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1479,
                                            "src": "4785:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4769:23:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1484,
                                    "id": 1488,
                                    "nodeType": "Return",
                                    "src": "4762:30:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1477,
                            "nodeType": "StructuredDocumentation",
                            "src": "4639:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "be7c76ad",
                        "id": 1490,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerManager",
                        "nameLocation": "4678:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1481,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4720:8:4"
                        },
                        "parameters": {
                            "id": 1480,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1479,
                                    "mutability": "mutable",
                                    "name": "worker",
                                    "nameLocation": "4703:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1490,
                                    "src": "4695:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1478,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4695:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4694:16:4"
                        },
                        "returnParameters": {
                            "id": 1484,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1483,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1490,
                                    "src": "4743:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1482,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4743:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4742:9:4"
                        },
                        "scope": 3330,
                        "src": "4669:130:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5818
                        ],
                        "body": {
                            "id": 1503,
                            "nodeType": "Block",
                            "src": "4917:44:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1499,
                                            "name": "workerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1346,
                                            "src": "4934:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 1501,
                                        "indexExpression": {
                                            "id": 1500,
                                            "name": "manager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1493,
                                            "src": "4946:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4934:20:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1498,
                                    "id": 1502,
                                    "nodeType": "Return",
                                    "src": "4927:27:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1491,
                            "nodeType": "StructuredDocumentation",
                            "src": "4805:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "59c4afc0",
                        "id": 1504,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerCount",
                        "nameLocation": "4844:14:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1495,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4885:8:4"
                        },
                        "parameters": {
                            "id": 1494,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1493,
                                    "mutability": "mutable",
                                    "name": "manager",
                                    "nameLocation": "4867:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1504,
                                    "src": "4859:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1492,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4859:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4858:17:4"
                        },
                        "returnParameters": {
                            "id": 1498,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1497,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1504,
                                    "src": "4908:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1496,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4908:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4907:9:4"
                        },
                        "scope": 3330,
                        "src": "4835:126:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 1534,
                            "nodeType": "Block",
                            "src": "5103:174:4",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 1532,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 1527,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                "id": 1520,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1515,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5120:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 1517,
                                                                "name": "IRelayHub",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5896,
                                                                "src": "5140:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$5896_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$5896_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            ],
                                                            "id": 1516,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "5135:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 1518,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5135:15:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_IRelayHub_$5896",
                                                            "typeString": "type(contract IRelayHub)"
                                                        }
                                                    },
                                                    "id": 1519,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5135:27:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "src": "5120:42:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "||",
                                            "rightExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                "id": 1526,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1521,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5178:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 1523,
                                                                "name": "Ownable",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 10182,
                                                                "src": "5198:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_Ownable_$10182_$",
                                                                    "typeString": "type(contract Ownable)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_Ownable_$10182_$",
                                                                    "typeString": "type(contract Ownable)"
                                                                }
                                                            ],
                                                            "id": 1522,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "5193:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 1524,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5193:13:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_Ownable_$10182",
                                                            "typeString": "type(contract Ownable)"
                                                        }
                                                    },
                                                    "id": 1525,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5193:25:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "src": "5178:40:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "5120:98:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 1530,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5258:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 1528,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "5234:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_RelayHub_$3330_$",
                                                        "typeString": "type(contract super RelayHub)"
                                                    }
                                                },
                                                "id": 1529,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "5234:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 1531,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5234:36:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "5120:150:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 1514,
                                    "id": 1533,
                                    "nodeType": "Return",
                                    "src": "5113:157:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1505,
                            "nodeType": "StructuredDocumentation",
                            "src": "4967:23:4",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 1535,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "5004:17:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1511,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 1509,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "5071:7:4"
                                },
                                {
                                    "id": 1510,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "5080:6:4"
                                }
                            ],
                            "src": "5062:25:4"
                        },
                        "parameters": {
                            "id": 1508,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1507,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "5029:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1535,
                                    "src": "5022:18:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 1506,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5022:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5021:20:4"
                        },
                        "returnParameters": {
                            "id": 1514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1535,
                                    "src": "5097:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1512,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5097:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5096:6:4"
                        },
                        "scope": 3330,
                        "src": "4995:282:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5681
                        ],
                        "body": {
                            "id": 1569,
                            "nodeType": "Block",
                            "src": "5386:264:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1546,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1543,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "5404:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1544,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5404:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 1545,
                                                    "name": "relayRegistrar",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1233,
                                                    "src": "5418:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "5404:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "63616c6c6572206973206e6f742072656c617920726567697374726172",
                                                "id": 1547,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5434:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_12c17dc2880250c8beea9a54d0d6b8585176a1d283173f6a6597811ab427f4a0",
                                                    "typeString": "literal_string \"caller is not relay registrar\""
                                                },
                                                "value": "caller is not relay registrar"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_12c17dc2880250c8beea9a54d0d6b8585176a1d283173f6a6597811ab427f4a0",
                                                    "typeString": "literal_string \"caller is not relay registrar\""
                                                }
                                            ],
                                            "id": 1542,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5396:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1548,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5396:70:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1549,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5396:70:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1551,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1538,
                                                "src": "5501:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1550,
                                            "name": "verifyRelayManagerStaked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3150,
                                            "src": "5476:24:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                "typeString": "function (address) view"
                                            }
                                        },
                                        "id": 1552,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5476:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1553,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5476:38:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1559,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 1555,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1346,
                                                        "src": "5532:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1557,
                                                    "indexExpression": {
                                                        "id": 1556,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1538,
                                                        "src": "5544:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5532:25:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 1558,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5560:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5532:29:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f2072656c617920776f726b657273",
                                                "id": 1560,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5563:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                },
                                                "value": "no relay workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                }
                                            ],
                                            "id": 1554,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5524:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1561,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5524:58:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1562,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5524:58:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1566,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1538,
                                                "src": "5630:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 1563,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "5592:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1565,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "updateRelayKeepaliveTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6221,
                                            "src": "5592:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address) external"
                                            }
                                        },
                                        "id": 1567,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5592:51:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1568,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5592:51:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1536,
                            "nodeType": "StructuredDocumentation",
                            "src": "5283:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "4f7de031",
                        "id": 1570,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "onRelayServerRegistered",
                        "nameLocation": "5322:23:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1540,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5377:8:4"
                        },
                        "parameters": {
                            "id": 1539,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1538,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5354:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1570,
                                    "src": "5346:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1537,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5346:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5345:22:4"
                        },
                        "returnParameters": {
                            "id": 1541,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5386:0:4"
                        },
                        "scope": 3330,
                        "src": "5313:337:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5675
                        ],
                        "body": {
                            "id": 1651,
                            "nodeType": "Block",
                            "src": "5765:633:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1579
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1579,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nameLocation": "5783:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1651,
                                            "src": "5775:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 1578,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5775:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1582,
                                    "initialValue": {
                                        "expression": {
                                            "id": 1580,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "5798:3:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 1581,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "5798:10:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5775:33:4"
                                },
                                {
                                    "assignments": [
                                        1584
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1584,
                                            "mutability": "mutable",
                                            "name": "newWorkerCount",
                                            "nameLocation": "5826:14:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1651,
                                            "src": "5818:22:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1583,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5818:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1591,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "baseExpression": {
                                                "id": 1585,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1346,
                                                "src": "5843:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1587,
                                            "indexExpression": {
                                                "id": 1586,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "5855:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5843:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1588,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "5871:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 1589,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "5871:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5843:50:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5818:75:4"
                                },
                                {
                                    "expression": {
                                        "id": 1596,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1592,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1346,
                                                "src": "5903:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1594,
                                            "indexExpression": {
                                                "id": 1593,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "5915:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "5903:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1595,
                                            "name": "newWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1584,
                                            "src": "5931:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5903:42:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1597,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5903:42:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1602,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1599,
                                                    "name": "newWorkerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1584,
                                                    "src": "5963:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1600,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "5981:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 1601,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "maxWorkerCount",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5539,
                                                    "src": "5981:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5963:39:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6f206d616e7920776f726b657273",
                                                "id": 1603,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6004:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                },
                                                "value": "too many workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                }
                                            ],
                                            "id": 1598,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5955:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1604,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5955:68:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1605,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5955:68:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1607,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "6059:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1606,
                                            "name": "verifyRelayManagerStaked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3150,
                                            "src": "6034:24:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                "typeString": "function (address) view"
                                            }
                                        },
                                        "id": 1608,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6034:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1609,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6034:38:4"
                                },
                                {
                                    "body": {
                                        "id": 1643,
                                        "nodeType": "Block",
                                        "src": "6136:176:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 1631,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "baseExpression": {
                                                                    "id": 1622,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1342,
                                                                    "src": "6158:15:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 1626,
                                                                "indexExpression": {
                                                                    "baseExpression": {
                                                                        "id": 1623,
                                                                        "name": "newRelayWorkers",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1574,
                                                                        "src": "6174:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                            "typeString": "address[] calldata"
                                                                        }
                                                                    },
                                                                    "id": 1625,
                                                                    "indexExpression": {
                                                                        "id": 1624,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1611,
                                                                        "src": "6190:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "6174:18:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "6158:35:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 1629,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "6205:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 1628,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "6197:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1627,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "6197:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 1630,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "6197:10:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "6158:49:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "7468697320776f726b6572206861732061206d616e61676572",
                                                            "id": 1632,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6209:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            },
                                                            "value": "this worker has a manager"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            }
                                                        ],
                                                        "id": 1621,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "6150:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1633,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6150:87:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1634,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6150:87:4"
                                            },
                                            {
                                                "expression": {
                                                    "id": 1641,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1635,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1342,
                                                            "src": "6251:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1639,
                                                        "indexExpression": {
                                                            "baseExpression": {
                                                                "id": 1636,
                                                                "name": "newRelayWorkers",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1574,
                                                                "src": "6267:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                    "typeString": "address[] calldata"
                                                                }
                                                            },
                                                            "id": 1638,
                                                            "indexExpression": {
                                                                "id": 1637,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1611,
                                                                "src": "6283:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "6267:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6251:35:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "id": 1640,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1579,
                                                        "src": "6289:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "6251:50:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 1642,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6251:50:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1617,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1614,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1611,
                                            "src": "6103:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1615,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "6107:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 1616,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "6107:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6103:26:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1644,
                                    "initializationExpression": {
                                        "assignments": [
                                            1611
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1611,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "6096:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1644,
                                                "src": "6088:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1610,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6088:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1613,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1612,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6100:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "6088:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1619,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "6131:3:4",
                                            "subExpression": {
                                                "id": 1618,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1611,
                                                "src": "6131:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1620,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6131:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "6083:229:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1646,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "6345:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 1647,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "6359:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            {
                                                "id": 1648,
                                                "name": "newWorkerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1584,
                                                "src": "6376:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1645,
                                            "name": "RelayWorkersAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5572,
                                            "src": "6327:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address[] memory,uint256)"
                                            }
                                        },
                                        "id": 1649,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6327:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1650,
                                    "nodeType": "EmitStatement",
                                    "src": "6322:69:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1571,
                            "nodeType": "StructuredDocumentation",
                            "src": "5656:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "c2da0786",
                        "id": 1652,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nameLocation": "5695:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1576,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5756:8:4"
                        },
                        "parameters": {
                            "id": 1575,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1574,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "5730:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1652,
                                    "src": "5711:34:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1572,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5711:7:4",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 1573,
                                        "nodeType": "ArrayTypeName",
                                        "src": "5711:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5710:36:4"
                        },
                        "returnParameters": {
                            "id": 1577,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5765:0:4"
                        },
                        "scope": 3330,
                        "src": "5686:712:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5687
                        ],
                        "body": {
                            "id": 1692,
                            "nodeType": "Block",
                            "src": "6502:260:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "id": 1663,
                                                                    "name": "IPaymaster",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5447,
                                                                    "src": "6550:10:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                        "typeString": "type(contract IPaymaster)"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                        "typeString": "type(contract IPaymaster)"
                                                                    }
                                                                ],
                                                                "id": 1662,
                                                                "name": "type",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967269,
                                                                "src": "6545:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                    "typeString": "function () pure"
                                                                }
                                                            },
                                                            "id": 1664,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6545:16:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_meta_type_t_contract$_IPaymaster_$5447",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1665,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "interfaceId",
                                                        "nodeType": "MemberAccess",
                                                        "src": "6545:28:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1660,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1655,
                                                        "src": "6520:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 1661,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "supportsInterface",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12196,
                                                    "src": "6520:24:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$bound_to$_t_address_$",
                                                        "typeString": "function (address,bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 1666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6520:54:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746172676574206973206e6f7420612076616c696420495061796d6173746572",
                                                "id": 1667,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6576:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_07905ca7d5fe750a75ea356d719c634bb8b03c9bc777ae573c075e017444f22a",
                                                    "typeString": "literal_string \"target is not a valid IPaymaster\""
                                                },
                                                "value": "target is not a valid IPaymaster"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_07905ca7d5fe750a75ea356d719c634bb8b03c9bc777ae573c075e017444f22a",
                                                    "typeString": "literal_string \"target is not a valid IPaymaster\""
                                                }
                                            ],
                                            "id": 1659,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6512:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1668,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6512:99:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1669,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6512:99:4"
                                },
                                {
                                    "assignments": [
                                        1671
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1671,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "6629:6:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1692,
                                            "src": "6621:14:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1670,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6621:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1674,
                                    "initialValue": {
                                        "expression": {
                                            "id": 1672,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "6638:3:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 1673,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "src": "6638:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6621:26:4"
                                },
                                {
                                    "expression": {
                                        "id": 1683,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1675,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "6658:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1677,
                                            "indexExpression": {
                                                "id": 1676,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1655,
                                                "src": "6667:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "6658:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 1682,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 1678,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "6677:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 1680,
                                                "indexExpression": {
                                                    "id": 1679,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1655,
                                                    "src": "6686:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6677:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 1681,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1671,
                                                "src": "6696:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "6677:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6658:44:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1684,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6658:44:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1686,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1655,
                                                "src": "6728:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 1687,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "6736:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1688,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "6736:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 1689,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1671,
                                                "src": "6748:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1685,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5590,
                                            "src": "6718:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 1690,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6718:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1691,
                                    "nodeType": "EmitStatement",
                                    "src": "6713:42:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1653,
                            "nodeType": "StructuredDocumentation",
                            "src": "6404:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "aa67c919",
                        "id": 1693,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "6443:10:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1657,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6485:8:4"
                        },
                        "parameters": {
                            "id": 1656,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1655,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "6462:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1693,
                                    "src": "6454:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1654,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6454:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6453:16:4"
                        },
                        "returnParameters": {
                            "id": 1658,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6502:0:4"
                        },
                        "scope": 3330,
                        "src": "6434:328:4",
                        "stateMutability": "payable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5826
                        ],
                        "body": {
                            "id": 1706,
                            "nodeType": "Block",
                            "src": "6874:40:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1702,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1350,
                                            "src": "6891:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 1704,
                                        "indexExpression": {
                                            "id": 1703,
                                            "name": "target",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1696,
                                            "src": "6900:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6891:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1701,
                                    "id": 1705,
                                    "nodeType": "Return",
                                    "src": "6884:23:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1694,
                            "nodeType": "StructuredDocumentation",
                            "src": "6768:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "70a08231",
                        "id": 1707,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nameLocation": "6807:9:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1698,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6842:8:4"
                        },
                        "parameters": {
                            "id": 1697,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1696,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "6825:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1707,
                                    "src": "6817:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1695,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6817:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6816:16:4"
                        },
                        "returnParameters": {
                            "id": 1701,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1700,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1707,
                                    "src": "6865:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1699,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6865:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6864:9:4"
                        },
                        "scope": 3330,
                        "src": "6798:116:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5695
                        ],
                        "body": {
                            "id": 1753,
                            "nodeType": "Block",
                            "src": "7022:244:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1720
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1720,
                                            "mutability": "mutable",
                                            "name": "amounts",
                                            "nameLocation": "7049:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1753,
                                            "src": "7032:24:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                "typeString": "uint256[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1718,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7032:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1719,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7032:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                                    "typeString": "uint256[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1726,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "31",
                                                "id": 1724,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7073:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                }
                                            ],
                                            "id": 1723,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "7059:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1721,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7063:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1722,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7063:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                                    "typeString": "uint256[]"
                                                }
                                            }
                                        },
                                        "id": 1725,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7059:16:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7032:43:4"
                                },
                                {
                                    "assignments": [
                                        1729
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1729,
                                            "mutability": "mutable",
                                            "name": "destinations",
                                            "nameLocation": "7110:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1753,
                                            "src": "7085:37:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                "typeString": "address payable[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1727,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7085:15:4",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 1728,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7085:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                                    "typeString": "address payable[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1735,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "31",
                                                "id": 1733,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7147:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                }
                                            ],
                                            "id": 1732,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "7125:21:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (address payable[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1730,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7129:15:4",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 1731,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7129:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                                    "typeString": "address payable[]"
                                                }
                                            }
                                        },
                                        "id": 1734,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7125:24:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                            "typeString": "address payable[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7085:64:4"
                                },
                                {
                                    "expression": {
                                        "id": 1740,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1736,
                                                "name": "amounts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1720,
                                                "src": "7159:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            },
                                            "id": 1738,
                                            "indexExpression": {
                                                "hexValue": "30",
                                                "id": 1737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7167:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7159:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1739,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1712,
                                            "src": "7172:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7159:19:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1741,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7159:19:4"
                                },
                                {
                                    "expression": {
                                        "id": 1746,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1742,
                                                "name": "destinations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1729,
                                                "src": "7188:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                }
                                            },
                                            "id": 1744,
                                            "indexExpression": {
                                                "hexValue": "30",
                                                "id": 1743,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7201:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7188:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1745,
                                            "name": "dest",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1710,
                                            "src": "7206:4:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "src": "7188:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "id": 1747,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7188:22:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1749,
                                                "name": "destinations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1729,
                                                "src": "7237:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                }
                                            },
                                            {
                                                "id": 1750,
                                                "name": "amounts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1720,
                                                "src": "7251:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            ],
                                            "id": 1748,
                                            "name": "withdrawMultiple",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1855,
                                            "src": "7220:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                                "typeString": "function (address payable[] memory,uint256[] memory)"
                                            }
                                        },
                                        "id": 1751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7220:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1752,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7220:39:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1708,
                            "nodeType": "StructuredDocumentation",
                            "src": "6920:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "f3fef3a3",
                        "id": 1754,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "6959:8:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1714,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7013:8:4"
                        },
                        "parameters": {
                            "id": 1713,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1710,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "6984:4:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1754,
                                    "src": "6968:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 1709,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6968:15:4",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1712,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "6998:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1754,
                                    "src": "6990:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1711,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6990:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6967:38:4"
                        },
                        "returnParameters": {
                            "id": 1715,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7022:0:4"
                        },
                        "scope": 3330,
                        "src": "6950:316:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5705
                        ],
                        "body": {
                            "id": 1854,
                            "nodeType": "Block",
                            "src": "7400:560:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1766
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1766,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "nameLocation": "7426:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1854,
                                            "src": "7410:23:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            },
                                            "typeName": {
                                                "id": 1765,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7410:15:4",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1772,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 1769,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "7444:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1770,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "7444:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1768,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "7436:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_payable_$",
                                                "typeString": "type(address payable)"
                                            },
                                            "typeName": {
                                                "id": 1767,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7436:8:4",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 1771,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7436:19:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7410:45:4"
                                },
                                {
                                    "body": {
                                        "id": 1852,
                                        "nodeType": "Block",
                                        "src": "7509:445:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "77697468647261774d756c7469706c65202573202573202573",
                                                            "id": 1787,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7535:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_35e75e61f30307412ba5384c58db7a42837ee9c3b8226c16ef5f06453f34639f",
                                                                "typeString": "literal_string \"withdrawMultiple %s %s %s\""
                                                            },
                                                            "value": "withdrawMultiple %s %s %s"
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1788,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1350,
                                                                "src": "7564:8:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1790,
                                                            "indexExpression": {
                                                                "id": 1789,
                                                                "name": "account",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1766,
                                                                "src": "7573:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7564:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1791,
                                                                "name": "dest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1758,
                                                                "src": "7583:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                    "typeString": "address payable[] memory"
                                                                }
                                                            },
                                                            "id": 1793,
                                                            "indexExpression": {
                                                                "id": 1792,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7588:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7583:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1794,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7592:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1796,
                                                            "indexExpression": {
                                                                "id": 1795,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7599:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7592:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_35e75e61f30307412ba5384c58db7a42837ee9c3b8226c16ef5f06453f34639f",
                                                                "typeString": "literal_string \"withdrawMultiple %s %s %s\""
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 1784,
                                                            "name": "console",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 20920,
                                                            "src": "7523:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                                "typeString": "type(library console)"
                                                            }
                                                        },
                                                        "id": 1786,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "log",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 16802,
                                                        "src": "7523:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (string memory,uint256,address,uint256) view"
                                                        }
                                                    },
                                                    "id": 1797,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7523:79:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1798,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7523:79:4"
                                            },
                                            {
                                                "assignments": [
                                                    1800
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 1800,
                                                        "mutability": "mutable",
                                                        "name": "balance",
                                                        "nameLocation": "7624:7:4",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 1852,
                                                        "src": "7616:15:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 1799,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7616:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 1804,
                                                "initialValue": {
                                                    "baseExpression": {
                                                        "id": 1801,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "7634:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1803,
                                                    "indexExpression": {
                                                        "id": 1802,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1766,
                                                        "src": "7643:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7634:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "7616:35:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 1810,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 1806,
                                                                "name": "balance",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1800,
                                                                "src": "7673:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": ">=",
                                                            "rightExpression": {
                                                                "baseExpression": {
                                                                    "id": 1807,
                                                                    "name": "amount",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1761,
                                                                    "src": "7684:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                        "typeString": "uint256[] memory"
                                                                    }
                                                                },
                                                                "id": 1809,
                                                                "indexExpression": {
                                                                    "id": 1808,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7691:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7684:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "7673:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "696e73756666696369656e742066756e6473",
                                                            "id": 1811,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7695:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                                "typeString": "literal_string \"insufficient funds\""
                                                            },
                                                            "value": "insufficient funds"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                                "typeString": "literal_string \"insufficient funds\""
                                                            }
                                                        ],
                                                        "id": 1805,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "7665:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1812,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7665:51:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1813,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7665:51:4"
                                            },
                                            {
                                                "expression": {
                                                    "id": 1822,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1814,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "7730:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 1816,
                                                        "indexExpression": {
                                                            "id": 1815,
                                                            "name": "account",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1766,
                                                            "src": "7739:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "7730:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1821,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 1817,
                                                            "name": "balance",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1800,
                                                            "src": "7750:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                            "baseExpression": {
                                                                "id": 1818,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7760:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1820,
                                                            "indexExpression": {
                                                                "id": 1819,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7767:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7760:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "7750:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "7730:39:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1823,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7730:39:4"
                                            },
                                            {
                                                "assignments": [
                                                    1825,
                                                    null
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 1825,
                                                        "mutability": "mutable",
                                                        "name": "success",
                                                        "nameLocation": "7789:7:4",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 1852,
                                                        "src": "7784:12:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 1824,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7784:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    },
                                                    null
                                                ],
                                                "id": 1836,
                                                "initialValue": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "",
                                                            "id": 1834,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7833:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                    "typeString": "literal_string \"\""
                                                                }
                                                            ],
                                                            "expression": {
                                                                "baseExpression": {
                                                                    "id": 1826,
                                                                    "name": "dest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1758,
                                                                    "src": "7802:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                        "typeString": "address payable[] memory"
                                                                    }
                                                                },
                                                                "id": 1828,
                                                                "indexExpression": {
                                                                    "id": 1827,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7807:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7802:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "id": 1829,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "7802:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 1833,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "value"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "baseExpression": {
                                                                    "id": 1830,
                                                                    "name": "amount",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1761,
                                                                    "src": "7822:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                        "typeString": "uint256[] memory"
                                                                    }
                                                                },
                                                                "id": 1832,
                                                                "indexExpression": {
                                                                    "id": 1831,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7829:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7822:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "7802:30:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1835,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7802:34:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "7783:53:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 1838,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1825,
                                                            "src": "7858:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "5472616e73666572206661696c65642e",
                                                            "id": 1839,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7867:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                                                "typeString": "literal_string \"Transfer failed.\""
                                                            },
                                                            "value": "Transfer failed."
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                                                "typeString": "literal_string \"Transfer failed.\""
                                                            }
                                                        ],
                                                        "id": 1837,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "7850:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1840,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7850:36:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1841,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7850:36:4"
                                            },
                                            {
                                                "eventCall": {
                                                    "arguments": [
                                                        {
                                                            "id": 1843,
                                                            "name": "account",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1766,
                                                            "src": "7915:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1844,
                                                                "name": "dest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1758,
                                                                "src": "7924:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                    "typeString": "address payable[] memory"
                                                                }
                                                            },
                                                            "id": 1846,
                                                            "indexExpression": {
                                                                "id": 1845,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7929:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7924:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1847,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7933:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1849,
                                                            "indexExpression": {
                                                                "id": 1848,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7940:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7933:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 1842,
                                                        "name": "Withdrawn",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5581,
                                                        "src": "7905:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (address,address,uint256)"
                                                        }
                                                    },
                                                    "id": 1850,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7905:38:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1851,
                                                "nodeType": "EmitStatement",
                                                "src": "7900:43:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1780,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1777,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1774,
                                            "src": "7485:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1778,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1761,
                                                "src": "7489:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            },
                                            "id": 1779,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "7489:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7485:17:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1853,
                                    "initializationExpression": {
                                        "assignments": [
                                            1774
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1774,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "7478:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1853,
                                                "src": "7470:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1773,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7470:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1776,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1775,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "7482:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "7470:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1782,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "7504:3:4",
                                            "subExpression": {
                                                "id": 1781,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1774,
                                                "src": "7504:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1783,
                                        "nodeType": "ExpressionStatement",
                                        "src": "7504:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "7465:489:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1755,
                            "nodeType": "StructuredDocumentation",
                            "src": "7272:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "72c1ab0c",
                        "id": 1855,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawMultiple",
                        "nameLocation": "7311:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1763,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7391:8:4"
                        },
                        "parameters": {
                            "id": 1762,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1758,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7353:4:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1855,
                                    "src": "7328:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1756,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7328:15:4",
                                            "stateMutability": "payable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "id": 1757,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7328:17:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                            "typeString": "address payable[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1761,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7376:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1855,
                                    "src": "7359:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1759,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7359:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1760,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7359:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7327:56:4"
                        },
                        "returnParameters": {
                            "id": 1764,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7400:0:4"
                        },
                        "scope": 3330,
                        "src": "7302:658:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1936,
                            "nodeType": "Block",
                            "src": "8237:964:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1880,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1870,
                                            "name": "gasAndDataLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1866,
                                            "src": "8247:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 1872,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1860,
                                                                        "src": "8289:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1873,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "8289:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1874,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8477,
                                                                "src": "8289:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 1871,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "8278:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1875,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8278:44:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IPaymaster_$5447",
                                                            "typeString": "contract IPaymaster"
                                                        }
                                                    },
                                                    "id": 1876,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "getGasAndDataLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5398,
                                                    "src": "8278:64:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$",
                                                        "typeString": "function () view external returns (struct IPaymaster.GasAndDataLimits memory)"
                                                    }
                                                },
                                                "id": 1878,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "hexValue": "3530303030",
                                                        "id": 1877,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8347:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_50000_by_1",
                                                            "typeString": "int_const 50000"
                                                        },
                                                        "value": "50000"
                                                    }
                                                ],
                                                "src": "8278:75:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$gas",
                                                    "typeString": "function () view external returns (struct IPaymaster.GasAndDataLimits memory)"
                                                }
                                            },
                                            "id": 1879,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8278:77:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "src": "8247:108:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                        }
                                    },
                                    "id": 1881,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8247:108:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1888,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 1883,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967281,
                                                            "src": "8373:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1884,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "src": "8373:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 1885,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8373:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1886,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8392:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1887,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "calldataSizeLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5390,
                                                    "src": "8392:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8373:53:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d73672e64617461206578636565646564206c696d6974",
                                                "id": 1889,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8428:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8124b78d3dd31a400eb53d199bad655cb97b699e099427b3cac51776e60b8516",
                                                    "typeString": "literal_string \"msg.data exceeded limit\""
                                                },
                                                "value": "msg.data exceeded limit"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8124b78d3dd31a400eb53d199bad655cb97b699e099427b3cac51776e60b8516",
                                                    "typeString": "literal_string \"msg.data exceeded limit\""
                                                }
                                            ],
                                            "id": 1882,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8365:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1890,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8365:90:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1891,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8365:90:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1896,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1893,
                                                    "name": "maxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1857,
                                                    "src": "8474:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1894,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8497:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1895,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5384,
                                                    "src": "8497:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8474:56:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616363657074616e63652062756467657420746f6f2068696768",
                                                "id": 1897,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8532:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c09eb2507fe31010cbff9f16ad55e8d52db07096085e44c13ac5adb40ebed8bf",
                                                    "typeString": "literal_string \"acceptance budget too high\""
                                                },
                                                "value": "acceptance budget too high"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c09eb2507fe31010cbff9f16ad55e8d52db07096085e44c13ac5adb40ebed8bf",
                                                    "typeString": "literal_string \"acceptance budget too high\""
                                                }
                                            ],
                                            "id": 1892,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8466:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1898,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8466:95:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1899,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8466:95:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1905,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1901,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8579:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1902,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5384,
                                                    "src": "8579:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1903,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8616:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1904,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "preRelayedCallGasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5386,
                                                    "src": "8616:39:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8579:76:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616363657074616e63652062756467657420746f6f206c6f77",
                                                "id": 1906,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8657:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2defbf8a2061ac91b77ceb8e097d54bcc569da825ca9932e52f018844a454958",
                                                    "typeString": "literal_string \"acceptance budget too low\""
                                                },
                                                "value": "acceptance budget too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2defbf8a2061ac91b77ceb8e097d54bcc569da825ca9932e52f018844a454958",
                                                    "typeString": "literal_string \"acceptance budget too low\""
                                                }
                                            ],
                                            "id": 1900,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8571:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1907,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8571:114:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1908,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8571:114:4"
                                },
                                {
                                    "expression": {
                                        "id": 1915,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1909,
                                            "name": "maxPossibleGas",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1868,
                                            "src": "8696:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 1914,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 1910,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1860,
                                                        "src": "8713:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1911,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "8713:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1912,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "transactionCalldataGasUsed",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8473,
                                                "src": "8713:49:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 1913,
                                                "name": "initialGasLeft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1862,
                                                "src": "8765:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "8713:66:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8696:83:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1916,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8696:83:4"
                                },
                                {
                                    "assignments": [
                                        1918
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1918,
                                            "mutability": "mutable",
                                            "name": "maxPossibleCharge",
                                            "nameLocation": "8798:17:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1936,
                                            "src": "8790:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1917,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8790:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1924,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 1920,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1868,
                                                "src": "8847:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 1921,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1860,
                                                    "src": "8875:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                "id": 1922,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8490,
                                                "src": "8875:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            ],
                                            "id": 1919,
                                            "name": "calculateCharge",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3073,
                                            "src": "8818:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                            }
                                        },
                                        "id": 1923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8818:89:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8790:117:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1932,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1926,
                                                    "name": "maxPossibleCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1918,
                                                    "src": "9089:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "baseExpression": {
                                                        "id": 1927,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "9110:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1931,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 1928,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1860,
                                                                "src": "9119:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1929,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "9119:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1930,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "9119:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9110:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9089:63:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5061796d61737465722062616c616e636520746f6f206c6f77",
                                                "id": 1933,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9166:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                },
                                                "value": "Paymaster balance too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                }
                                            ],
                                            "id": 1925,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9081:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1934,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9081:113:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1935,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9081:113:4"
                                }
                            ]
                        },
                        "id": 1937,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyGasAndDataLimits",
                        "nameLocation": "7975:22:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1863,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1857,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "8015:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8007:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1856,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8007:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1860,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "8075:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8044:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 1859,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1858,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "8044:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "8044:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1862,
                                    "mutability": "mutable",
                                    "name": "initialGasLeft",
                                    "nameLocation": "8105:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8097:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1861,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8097:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7997:128:4"
                        },
                        "returnParameters": {
                            "id": 1869,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1866,
                                    "mutability": "mutable",
                                    "name": "gasAndDataLimits",
                                    "nameLocation": "8195:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8160:51:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 1865,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1864,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "8160:27:4"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "8160:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1868,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "8221:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8213:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1867,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8213:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8159:77:4"
                        },
                        "scope": 3330,
                        "src": "7966:1235:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "canonicalName": "RelayHub.RelayCallData",
                        "id": 1976,
                        "members": [
                            {
                                "constant": false,
                                "id": 1939,
                                "mutability": "mutable",
                                "name": "success",
                                "nameLocation": "9243:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9238:12:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1938,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9238:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1941,
                                "mutability": "mutable",
                                "name": "functionSelector",
                                "nameLocation": "9267:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9260:23:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                },
                                "typeName": {
                                    "id": 1940,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9260:6:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1943,
                                "mutability": "mutable",
                                "name": "initialGasLeft",
                                "nameLocation": "9301:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9293:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1942,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9293:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1945,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nameLocation": "9331:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9325:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1944,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9325:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1947,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nameLocation": "9363:22:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9357:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1946,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9357:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1950,
                                "mutability": "mutable",
                                "name": "gasAndDataLimits",
                                "nameLocation": "9423:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9395:44:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                    "typeString": "struct IPaymaster.GasAndDataLimits"
                                },
                                "typeName": {
                                    "id": 1949,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 1948,
                                        "name": "IPaymaster.GasAndDataLimits",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 5391,
                                        "src": "9395:27:4"
                                    },
                                    "referencedDeclaration": 5391,
                                    "src": "9395:27:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1953,
                                "mutability": "mutable",
                                "name": "status",
                                "nameLocation": "9465:6:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9449:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                },
                                "typeName": {
                                    "id": 1952,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 1951,
                                        "name": "RelayCallStatus",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 5668,
                                        "src": "9449:15:4"
                                    },
                                    "referencedDeclaration": 5668,
                                    "src": "9449:15:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1955,
                                "mutability": "mutable",
                                "name": "innerGasUsed",
                                "nameLocation": "9489:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9481:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1954,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9481:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1957,
                                "mutability": "mutable",
                                "name": "maxPossibleGas",
                                "nameLocation": "9519:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9511:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1956,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9511:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1959,
                                "mutability": "mutable",
                                "name": "innerGasLimit",
                                "nameLocation": "9551:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9543:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1958,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9543:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1961,
                                "mutability": "mutable",
                                "name": "gasBeforeInner",
                                "nameLocation": "9582:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9574:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1960,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9574:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1963,
                                "mutability": "mutable",
                                "name": "gasUsed",
                                "nameLocation": "9614:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9606:15:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1962,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9606:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1965,
                                "mutability": "mutable",
                                "name": "devCharge",
                                "nameLocation": "9639:9:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9631:17:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1964,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9631:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1967,
                                "mutability": "mutable",
                                "name": "retData",
                                "nameLocation": "9664:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9658:13:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1966,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9658:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1969,
                                "mutability": "mutable",
                                "name": "relayManager",
                                "nameLocation": "9689:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9681:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 1968,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9681:7:4",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1971,
                                "mutability": "mutable",
                                "name": "relayRequestId",
                                "nameLocation": "9719:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9711:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 1970,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9711:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1973,
                                "mutability": "mutable",
                                "name": "tmpInitialGas",
                                "nameLocation": "9751:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9743:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1972,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9743:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1975,
                                "mutability": "mutable",
                                "name": "relayCallStatus",
                                "nameLocation": "9780:15:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9774:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1974,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9774:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayCallData",
                        "nameLocation": "9214:13:4",
                        "nodeType": "StructDefinition",
                        "scope": 3330,
                        "src": "9207:595:4",
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5729
                        ],
                        "body": {
                            "id": 2676,
                            "nodeType": "Block",
                            "src": "10245:8006:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2003
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2003,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nameLocation": "10276:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2676,
                                            "src": "10255:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                "typeString": "struct RelayHub.RelayCallData"
                                            },
                                            "typeName": {
                                                "id": 2002,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 2001,
                                                    "name": "RelayCallData",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 1976,
                                                    "src": "10255:13:4"
                                                },
                                                "referencedDeclaration": 1976,
                                                "src": "10255:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_storage_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2004,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10255:25:4"
                                },
                                {
                                    "expression": {
                                        "id": 2010,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2005,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "10290:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2007,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "initialGasLeft",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1943,
                                            "src": "10290:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 2008,
                                                "name": "aggregateGasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3329,
                                                "src": "10312:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 2009,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "10312:18:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10290:40:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2011,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10290:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 2020,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2012,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "10340:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2014,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "relayRequestId",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1971,
                                            "src": "10340:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 2017,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1984,
                                                    "src": "10389:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2018,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1986,
                                                    "src": "10403:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2015,
                                                    "name": "GsnUtils",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 8572,
                                                    "src": "10362:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_GsnUtils_$8572_$",
                                                        "typeString": "type(library GsnUtils)"
                                                    }
                                                },
                                                "id": 2016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "getRelayRequestID",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8527,
                                                "src": "10362:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bytes32_$",
                                                    "typeString": "function (struct GsnTypes.RelayRequest calldata,bytes calldata) pure returns (bytes32)"
                                                }
                                            },
                                            "id": 2019,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "10362:51:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "src": "10340:73:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "id": 2021,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10340:73:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573744964",
                                                "id": 2025,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10436:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_17cf934ba81fac1d8620873aadad9ead0d331f60e054b56fd4bdd931ac9dbaa0",
                                                    "typeString": "literal_string \"relayCall relayRequestId\""
                                                },
                                                "value": "relayCall relayRequestId"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_17cf934ba81fac1d8620873aadad9ead0d331f60e054b56fd4bdd931ac9dbaa0",
                                                    "typeString": "literal_string \"relayCall relayRequestId\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2022,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10424:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2024,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "10424:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2026,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10424:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2027,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10424:39:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 2031,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2003,
                                                    "src": "10492:4:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                    }
                                                },
                                                "id": 2032,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayRequestId",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1971,
                                                "src": "10492:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2028,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10473:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2030,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes32",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13423,
                                            "src": "10473:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
                                                "typeString": "function (bytes32) view"
                                            }
                                        },
                                        "id": 2033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10473:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2034,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10473:39:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6d",
                                                "id": 2038,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10534:37:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_fcf4382d5f60777d98e6d391203c11683d0ed0db92e205110476e67f8f3b11a4",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.from\""
                                                },
                                                "value": "relayCall relayRequest.request.from"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2039,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10573:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2040,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10573:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2041,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "10573:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_fcf4382d5f60777d98e6d391203c11683d0ed0db92e205110476e67f8f3b11a4",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.from\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2035,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10522:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2037,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "10522:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2042,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10522:77:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2043,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10522:77:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e746f",
                                                "id": 2047,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10621:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4b8ff89d45b95d24487df110e72d76cead04f7aff50f34d4b700cbd414b99317",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.to\""
                                                },
                                                "value": "relayCall relayRequest.request.to"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2048,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10658:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2049,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10658:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2050,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5047,
                                                "src": "10658:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_4b8ff89d45b95d24487df110e72d76cead04f7aff50f34d4b700cbd414b99317",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.to\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2044,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10609:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2046,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "10609:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2051,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10609:73:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2052,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10609:73:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e76616c7565",
                                                "id": 2056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10704:38:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_bca1306277b61fccfde35601adff89eeab65a35e8295aaa37de6cf3300d0fc1a",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.value\""
                                                },
                                                "value": "relayCall relayRequest.request.value"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2057,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10744:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2058,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10744:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2059,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "10744:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_bca1306277b61fccfde35601adff89eeab65a35e8295aaa37de6cf3300d0fc1a",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.value\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2053,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10692:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2055,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10692:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2060,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10692:79:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2061,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10692:79:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e676173",
                                                "id": 2065,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10793:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_583a060fa38a133546f4edc469d090b6ae76e02bfaf0a35053830ec8f4a19495",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.gas\""
                                                },
                                                "value": "relayCall relayRequest.request.gas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2066,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10831:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2067,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10831:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2068,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "10831:24:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_583a060fa38a133546f4edc469d090b6ae76e02bfaf0a35053830ec8f4a19495",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.gas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2062,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10781:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2064,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10781:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2069,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10781:75:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2070,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10781:75:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e6365",
                                                "id": 2074,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10878:38:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_462711ad34c7bac38f50476b17264f6718ca27eafffe4802fe0a12964b3f1252",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.nonce\""
                                                },
                                                "value": "relayCall relayRequest.request.nonce"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2075,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10918:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2076,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10918:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2077,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "nonce",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5053,
                                                "src": "10918:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_462711ad34c7bac38f50476b17264f6718ca27eafffe4802fe0a12964b3f1252",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.nonce\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2071,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10866:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2073,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10866:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10866:79:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2079,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10866:79:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65",
                                                "id": 2083,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10967:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2a5dd65da862186f68e7bb0fb08b28389d888938a5f238b42e57d99194c66e0d",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.validUntilTime\""
                                                },
                                                "value": "relayCall relayRequest.request.validUntilTime"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2084,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11016:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2085,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "11016:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2086,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "validUntilTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5057,
                                                "src": "11016:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_2a5dd65da862186f68e7bb0fb08b28389d888938a5f238b42e57d99194c66e0d",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.validUntilTime\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2080,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10955:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2082,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10955:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2087,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10955:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2088,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10955:97:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d6178466565506572476173",
                                                "id": 2092,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11075:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_74525e67d8510b3d1f6bb1bed729e3715a0c824b4f3401aa2e2fedd322bdc92d",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxFeePerGas\""
                                                },
                                                "value": "relayCall relayRequest.relayData.maxFeePerGas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2093,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11124:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2094,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11124:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2095,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "11124:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_74525e67d8510b3d1f6bb1bed729e3715a0c824b4f3401aa2e2fedd322bdc92d",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxFeePerGas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2089,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11063:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2091,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11063:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2096,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11063:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2097,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11063:97:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f72697479466565506572476173",
                                                "id": 2101,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11182:55:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b5f4e42ead408476c38331a2d23e3c8c156cc8275d32e860c5367b57911830ed",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxPriorityFeePerGas\""
                                                },
                                                "value": "relayCall relayRequest.relayData.maxPriorityFeePerGas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2102,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11239:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2103,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11239:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2104,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxPriorityFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8471,
                                                "src": "11239:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_b5f4e42ead408476c38331a2d23e3c8c156cc8275d32e860c5367b57911830ed",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxPriorityFeePerGas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2098,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11170:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11170:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11170:113:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2106,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11170:113:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c6461746147617355736564",
                                                "id": 2110,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11305:61:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6217d1a22ef9196a0d9c4564b6579717fe9ce9b2d24e62e096c11813679fe585",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.transactionCalldataGasUsed\""
                                                },
                                                "value": "relayCall relayRequest.relayData.transactionCalldataGasUsed"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2111,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11368:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2112,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11368:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2113,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "transactionCalldataGasUsed",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8473,
                                                "src": "11368:49:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_6217d1a22ef9196a0d9c4564b6579717fe9ce9b2d24e62e096c11813679fe585",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.transactionCalldataGasUsed\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2107,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11293:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2109,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11293:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2114,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11293:125:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2115,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11293:125:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b6572",
                                                "id": 2119,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11440:46:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_012e98baaf2f6664fed0896d17b47356836f7c0d0d2cdbc7ce843f9f1aca29fa",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.relayWorker\""
                                                },
                                                "value": "relayCall relayRequest.relayData.relayWorker"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2120,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11488:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2121,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11488:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2122,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayWorker",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8475,
                                                "src": "11488:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_012e98baaf2f6664fed0896d17b47356836f7c0d0d2cdbc7ce843f9f1aca29fa",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.relayWorker\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2116,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11428:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2118,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11428:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2123,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11428:95:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2124,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11428:95:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d6173746572",
                                                "id": 2128,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11545:44:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f07d588f5c3629a800a71957fb3cc3c26c332fb5f6674cd9cafb3f56490efe69",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymaster\""
                                                },
                                                "value": "relayCall relayRequest.relayData.paymaster"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2129,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11591:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2130,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11591:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2131,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "11591:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_f07d588f5c3629a800a71957fb3cc3c26c332fb5f6674cd9cafb3f56490efe69",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymaster\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2125,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11533:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2127,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11533:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2132,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11533:91:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2133,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11533:91:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f72776172646572",
                                                "id": 2137,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11646:44:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ea0ed7e902cd07af7c652761679cee8934121d73b718614032daeae4f7f1315b",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.forwarder\""
                                                },
                                                "value": "relayCall relayRequest.relayData.forwarder"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2138,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11692:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11692:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2140,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "forwarder",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8479,
                                                "src": "11692:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_ea0ed7e902cd07af7c652761679cee8934121d73b718614032daeae4f7f1315b",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.forwarder\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2134,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11634:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2136,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11634:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2141,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11634:91:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2142,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11634:91:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e744964",
                                                "id": 2146,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11747:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_80a38148546f46ff570877c8e66fab19ecb1e2902012e1182452ed0de412f895",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.clientId\""
                                                },
                                                "value": "relayCall relayRequest.relayData.clientId"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2147,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11792:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2148,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11792:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2149,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "clientId",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8483,
                                                "src": "11792:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_80a38148546f46ff570877c8e66fab19ecb1e2902012e1182452ed0de412f895",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.clientId\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2143,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11735:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2145,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11735:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2150,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11735:89:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2151,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11735:89:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c20646f6d61696e536570617261746f724e616d65",
                                                "id": 2155,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11847:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_57e3e23c7a70bb0820dfdd7e0506d6e49aa2cc1206cb517aa2290b1d6793b7d0",
                                                    "typeString": "literal_string \"relayCall domainSeparatorName\""
                                                },
                                                "value": "relayCall domainSeparatorName"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_57e3e23c7a70bb0820dfdd7e0506d6e49aa2cc1206cb517aa2290b1d6793b7d0",
                                                    "typeString": "literal_string \"relayCall domainSeparatorName\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2152,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11835:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2154,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "11835:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2156,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11835:44:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2157,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11835:44:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2161,
                                                "name": "domainSeparatorName",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1979,
                                                "src": "11907:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2158,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11889:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2160,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logString",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12933,
                                            "src": "11889:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2162,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11889:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2163,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11889:38:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c207369676e6174757265",
                                                "id": 2167,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11949:21:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a214e1cff23aa03adbec3351fff6efdc512aa58b865a8a2a423818c5d6ce54bc",
                                                    "typeString": "literal_string \"relayCall signature\""
                                                },
                                                "value": "relayCall signature"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_a214e1cff23aa03adbec3351fff6efdc512aa58b865a8a2a423818c5d6ce54bc",
                                                    "typeString": "literal_string \"relayCall signature\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2164,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11937:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2166,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "11937:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11937:34:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2169,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11937:34:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2173,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1986,
                                                "src": "11998:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2170,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11981:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2172,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "11981:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2174,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11981:27:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2175,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11981:27:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c20617070726f76616c44617461",
                                                "id": 2179,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12030:24:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a7aa56e8bdb96014d12654732651578864a151e28a1ae9270363ba13f2b16a4f",
                                                    "typeString": "literal_string \"relayCall approvalData\""
                                                },
                                                "value": "relayCall approvalData"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_a7aa56e8bdb96014d12654732651578864a151e28a1ae9270363ba13f2b16a4f",
                                                    "typeString": "literal_string \"relayCall approvalData\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2176,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12018:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2178,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12018:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2180,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12018:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2181,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12018:37:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2185,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1988,
                                                "src": "12082:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2182,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12065:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2184,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12065:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2186,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12065:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2187,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12065:30:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e64617461",
                                                "id": 2191,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12117:37:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_dae5a2120924253660b82d2446bfb35c23d96045644aebf1dcf6cc096584b8a1",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.data\""
                                                },
                                                "value": "relayCall relayRequest.request.data"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_dae5a2120924253660b82d2446bfb35c23d96045644aebf1dcf6cc096584b8a1",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.data\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2188,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12105:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2190,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12105:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2192,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12105:50:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2193,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12105:50:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2197,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "12182:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "12182:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "12182:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2194,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12165:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2196,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12165:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2200,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12165:43:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2201,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12165:43:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657244617461",
                                                "id": 2205,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12230:48:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_bf2b9bbecd54d292b365355d7093f4c73d81970e27e2402429cc66edb165d359",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymasterData\""
                                                },
                                                "value": "relayCall relayRequest.relayData.paymasterData"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_bf2b9bbecd54d292b365355d7093f4c73d81970e27e2402429cc66edb165d359",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymasterData\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2202,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12218:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2204,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12218:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2206,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12218:61:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2207,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12218:61:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2211,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "12306:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2212,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "12306:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2213,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymasterData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8481,
                                                "src": "12306:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2208,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12289:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2210,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12289:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2214,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12289:54:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2215,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12289:54:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c206d6178416363657074616e6365427564676574",
                                                "id": 2219,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12365:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46424519ad66645695190d8710d685acabbf95518dd85a7c64c069c7a53f2862",
                                                    "typeString": "literal_string \"relayCall maxAcceptanceBudget\""
                                                },
                                                "value": "relayCall maxAcceptanceBudget"
                                            },
                                            {
                                                "id": 2220,
                                                "name": "maxAcceptanceBudget",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1981,
                                                "src": "12398:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_46424519ad66645695190d8710d685acabbf95518dd85a7c64c069c7a53f2862",
                                                    "typeString": "literal_string \"relayCall maxAcceptanceBudget\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2216,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12353:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2218,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "12353:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2221,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12353:65:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2222,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12353:65:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2226,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12437:15:4",
                                                "subExpression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 2224,
                                                        "name": "isDeprecated",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3188,
                                                        "src": "12438:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                                            "typeString": "function () view returns (bool)"
                                                        }
                                                    },
                                                    "id": 2225,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12438:14:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6875622064657072656361746564",
                                                "id": 2227,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12454:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0edc2e44909d347a87677b1b00401536fb358ed396bf0528207a9816dbaa5b21",
                                                    "typeString": "literal_string \"hub deprecated\""
                                                },
                                                "value": "hub deprecated"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0edc2e44909d347a87677b1b00401536fb358ed396bf0528207a9816dbaa5b21",
                                                    "typeString": "literal_string \"hub deprecated\""
                                                }
                                            ],
                                            "id": 2223,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12429:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2228,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12429:42:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2229,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12429:42:4"
                                },
                                {
                                    "expression": {
                                        "id": 2251,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2230,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "12481:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2232,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "functionSelector",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1941,
                                            "src": "12481:21:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2238,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2233,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "12505:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2234,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "12505:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2235,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "12505:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 2236,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12505:32:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "hexValue": "34",
                                                    "id": 2237,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "12539:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_4_by_1",
                                                        "typeString": "int_const 4"
                                                    },
                                                    "value": "4"
                                                },
                                                "src": "12505:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseExpression": {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 2248,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "12605:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 2247,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "12598:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes4_$",
                                                        "typeString": "type(bytes4)"
                                                    },
                                                    "typeName": {
                                                        "id": 2246,
                                                        "name": "bytes4",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12598:6:4",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 2249,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12598:9:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "id": 2250,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "Conditional",
                                            "src": "12505:102:4",
                                            "trueExpression": {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2241,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "12566:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2242,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "12566:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2243,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "12566:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "30",
                                                        "id": 2244,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "12593:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 2239,
                                                        "name": "MinLibBytes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8687,
                                                        "src": "12543:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_MinLibBytes_$8687_$",
                                                            "typeString": "type(library MinLibBytes)"
                                                        }
                                                    },
                                                    "id": 2240,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "readBytes4",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8686,
                                                    "src": "12543:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes4_$",
                                                        "typeString": "function (bytes memory,uint256) pure returns (bytes4)"
                                                    }
                                                },
                                                "id": 2245,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12543:52:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "src": "12481:126:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "id": 2252,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12481:126:4"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 2261,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "id": 2256,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 2253,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "12622:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2254,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "12622:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "id": 2255,
                                                "name": "batchGateway",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1231,
                                                "src": "12636:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "src": "12622:26:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "id": 2260,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 2257,
                                                    "name": "tx",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967270,
                                                    "src": "12652:2:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_transaction",
                                                        "typeString": "tx"
                                                    }
                                                },
                                                "id": 2258,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "origin",
                                                "nodeType": "MemberAccess",
                                                "src": "12652:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "id": 2259,
                                                "name": "DRY_RUN_ADDRESS",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1214,
                                                "src": "12665:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "src": "12652:28:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "12622:58:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2290,
                                    "nodeType": "IfStatement",
                                    "src": "12618:322:4",
                                    "trueBody": {
                                        "id": 2289,
                                        "nodeType": "Block",
                                        "src": "12682:258:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2266,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2263,
                                                                    "name": "signature",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1986,
                                                                    "src": "12704:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                "id": 2264,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "length",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12704:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "!=",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 2265,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12724:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12704:21:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "6d697373696e67207369676e6174757265206f72206261642067617465776179",
                                                            "id": 2267,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12727:34:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_629cb97a040744050f855d781a40fdb10d8ddadf722549b88a7aae91ea1a2352",
                                                                "typeString": "literal_string \"missing signature or bad gateway\""
                                                            },
                                                            "value": "missing signature or bad gateway"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_629cb97a040744050f855d781a40fdb10d8ddadf722549b88a7aae91ea1a2352",
                                                                "typeString": "literal_string \"missing signature or bad gateway\""
                                                            }
                                                        ],
                                                        "id": 2262,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12696:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2268,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12696:66:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2269,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12696:66:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2275,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2271,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "12784:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2272,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12784:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "id": 2273,
                                                                    "name": "tx",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967270,
                                                                    "src": "12798:2:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_transaction",
                                                                        "typeString": "tx"
                                                                    }
                                                                },
                                                                "id": 2274,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "origin",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12798:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "12784:23:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "72656c617920776f726b6572206d75737420626520454f41",
                                                            "id": 2276,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12809:26:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_5aac529f1934cfdfceff3677a77f5553495c6ad3ebc3cea9589311813041a0ca",
                                                                "typeString": "literal_string \"relay worker must be EOA\""
                                                            },
                                                            "value": "relay worker must be EOA"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_5aac529f1934cfdfceff3677a77f5553495c6ad3ebc3cea9589311813041a0ca",
                                                                "typeString": "literal_string \"relay worker must be EOA\""
                                                            }
                                                        ],
                                                        "id": 2270,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12776:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2277,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12776:60:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2278,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12776:60:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2285,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2280,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "12858:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2281,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12858:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 2282,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1984,
                                                                        "src": "12872:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 2283,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "12872:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 2284,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayWorker",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8475,
                                                                "src": "12872:34:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "12858:48:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4e6f74206120726967687420776f726b6572",
                                                            "id": 2286,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12908:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                                "typeString": "literal_string \"Not a right worker\""
                                                            },
                                                            "value": "Not a right worker"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                                "typeString": "literal_string \"Not a right worker\""
                                                            }
                                                        ],
                                                        "id": 2279,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12850:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2287,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12850:79:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2288,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12850:79:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 2294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 2291,
                                                "name": "tx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967270,
                                                "src": "12954:2:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_transaction",
                                                    "typeString": "tx"
                                                }
                                            },
                                            "id": 2292,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "origin",
                                            "nodeType": "MemberAccess",
                                            "src": "12954:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "!=",
                                        "rightExpression": {
                                            "id": 2293,
                                            "name": "DRY_RUN_ADDRESS",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1214,
                                            "src": "12967:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "12954:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2322,
                                    "nodeType": "IfStatement",
                                    "src": "12950:265:4",
                                    "trueBody": {
                                        "id": 2321,
                                        "nodeType": "Block",
                                        "src": "12984:231:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 2303,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "expression": {
                                                            "id": 2295,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "12998:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2297,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "memberName": "relayManager",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1969,
                                                        "src": "12998:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "baseExpression": {
                                                            "id": 2298,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1342,
                                                            "src": "13018:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 2302,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2299,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "13034:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2300,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "13034:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2301,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayWorker",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8475,
                                                            "src": "13034:34:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "13018:51:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "12998:71:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 2304,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12998:71:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2312,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2306,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "13091:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2307,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayManager",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1969,
                                                                "src": "13091:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "!=",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 2310,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "13120:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 2309,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "13112:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2308,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "13112:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 2311,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "13112:10:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "13091:31:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                            "id": 2313,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "13124:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                                "typeString": "literal_string \"Unknown relay worker\""
                                                            },
                                                            "value": "Unknown relay worker"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                                "typeString": "literal_string \"Unknown relay worker\""
                                                            }
                                                        ],
                                                        "id": 2305,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "13083:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2314,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13083:64:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2315,
                                                "nodeType": "ExpressionStatement",
                                                "src": "13083:64:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2317,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "13186:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2318,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayManager",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1969,
                                                            "src": "13186:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 2316,
                                                        "name": "verifyRelayManagerStaked",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3150,
                                                        "src": "13161:24:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                            "typeString": "function (address) view"
                                                        }
                                                    },
                                                    "id": 2319,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13161:43:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2320,
                                                "nodeType": "ExpressionStatement",
                                                "src": "13161:43:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 2335,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "components": [
                                                {
                                                    "expression": {
                                                        "id": 2323,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13226:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2325,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasAndDataLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1950,
                                                    "src": "13226:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2326,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13249:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2327,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "maxPossibleGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1957,
                                                    "src": "13249:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "id": 2328,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "13225:44:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasAndDataLimits memory,uint256)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 2330,
                                                    "name": "maxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1981,
                                                    "src": "13307:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 2331,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1984,
                                                    "src": "13328:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2332,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13342:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2333,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "initialGasLeft",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1943,
                                                    "src": "13342:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "id": 2329,
                                                "name": "verifyGasAndDataLimits",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1937,
                                                "src": "13284:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_uint256_$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                    "typeString": "function (uint256,struct GsnTypes.RelayRequest calldata,uint256) view returns (struct IPaymaster.GasAndDataLimits memory,uint256)"
                                                }
                                            },
                                            "id": 2334,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "13284:78:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasAndDataLimits memory,uint256)"
                                            }
                                        },
                                        "src": "13225:137:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2336,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13225:137:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2340,
                                                "name": "domainSeparatorName",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1979,
                                                "src": "13416:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            },
                                            {
                                                "id": 2341,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1984,
                                                "src": "13436:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 2342,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1986,
                                                "src": "13449:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 2343,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1988,
                                                "src": "13459:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2337,
                                                "name": "RelayHubValidator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 9499,
                                                "src": "13373:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_RelayHubValidator_$9499_$",
                                                    "typeString": "type(library RelayHubValidator)"
                                                }
                                            },
                                            "id": 2339,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "verifyTransactionPacking",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 9472,
                                            "src": "13373:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_calldata_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (string calldata,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata) pure"
                                            }
                                        },
                                        "id": 2344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13373:99:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2345,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13373:99:4"
                                },
                                {
                                    "id": 2464,
                                    "nodeType": "Block",
                                    "src": "13479:2202:4",
                                    "statements": [
                                        {
                                            "expression": {
                                                "id": 2358,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2346,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13660:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2348,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1959,
                                                    "src": "13660:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2357,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2354,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2352,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 2349,
                                                                    "name": "gasleft",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967289,
                                                                    "src": "13681:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                        "typeString": "function () view returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 2350,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "13681:9:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "hexValue": "3633",
                                                                "id": 2351,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "13691:2:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_63_by_1",
                                                                    "typeString": "int_const 63"
                                                                },
                                                                "value": "63"
                                                            },
                                                            "src": "13681:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "/",
                                                        "rightExpression": {
                                                            "hexValue": "3634",
                                                            "id": 2353,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "13694:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_64_by_1",
                                                                "typeString": "int_const 64"
                                                            },
                                                            "value": "64"
                                                        },
                                                        "src": "13681:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2355,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "13698:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2356,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasReserve",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5541,
                                                        "src": "13698:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "13681:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "13660:55:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2359,
                                            "nodeType": "ExpressionStatement",
                                            "src": "13660:55:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2365,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2360,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13725:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2362,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasBeforeInner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1961,
                                                    "src": "13725:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 2363,
                                                        "name": "aggregateGasleft",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3329,
                                                        "src": "13747:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                            "typeString": "function () view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2364,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13747:18:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "13725:40:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2366,
                                            "nodeType": "ExpressionStatement",
                                            "src": "13725:40:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2385,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2367,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "14562:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2369,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "tmpInitialGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1973,
                                                    "src": "14562:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2384,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2381,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2378,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2375,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "expression": {
                                                                            "id": 2370,
                                                                            "name": "relayRequest",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1984,
                                                                            "src": "14583:12:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                            }
                                                                        },
                                                                        "id": 2371,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "relayData",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 8490,
                                                                        "src": "14583:22:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                                        }
                                                                    },
                                                                    "id": 2372,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "transactionCalldataGasUsed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8473,
                                                                    "src": "14583:49:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "+",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2373,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "14635:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2374,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "initialGasLeft",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1943,
                                                                    "src": "14635:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "14583:71:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "id": 2376,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "14657:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2377,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "innerGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1959,
                                                                "src": "14657:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "14583:92:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 2379,
                                                                "name": "config",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1236,
                                                                "src": "14678:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                }
                                                            },
                                                            "id": 2380,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "gasOverhead",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5545,
                                                            "src": "14678:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "14583:113:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2382,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "14699:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2383,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "postOverhead",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5543,
                                                        "src": "14699:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "14583:135:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "14562:156:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2386,
                                            "nodeType": "ExpressionStatement",
                                            "src": "14562:156:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2421,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2387,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "14987:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2389,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "success",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1939,
                                                            "src": "14987:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2390,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15001:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2391,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayCallStatus",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1975,
                                                            "src": "15001:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2392,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "14986:36:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "expression": {
                                                                            "id": 2403,
                                                                            "name": "RelayHub",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3330,
                                                                            "src": "15104:8:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_contract$_RelayHub_$3330_$",
                                                                                "typeString": "type(contract RelayHub)"
                                                                            }
                                                                        },
                                                                        "id": 2404,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "lValueRequested": false,
                                                                        "memberName": "innerRelayCall",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 2956,
                                                                        "src": "15104:23:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_string_calldata_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_struct$_GasAndDataLimits_$5391_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "function RelayHub.innerRelayCall(string calldata,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,struct IPaymaster.GasAndDataLimits calldata,uint256,uint256) returns (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                        }
                                                                    },
                                                                    "id": 2405,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "selector",
                                                                    "nodeType": "MemberAccess",
                                                                    "src": "15104:32:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes4",
                                                                        "typeString": "bytes4"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2406,
                                                                    "name": "domainSeparatorName",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1979,
                                                                    "src": "15138:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_string_calldata_ptr",
                                                                        "typeString": "string calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2407,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "15159:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2408,
                                                                    "name": "signature",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1986,
                                                                    "src": "15173:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2409,
                                                                    "name": "approvalData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1988,
                                                                    "src": "15184:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2410,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15198:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2411,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "gasAndDataLimits",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1950,
                                                                    "src": "15198:21:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                    }
                                                                },
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 2416,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 2412,
                                                                            "name": "vars",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 2003,
                                                                            "src": "15233:4:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                            }
                                                                        },
                                                                        "id": 2413,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "tmpInitialGas",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 1973,
                                                                        "src": "15233:18:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "-",
                                                                    "rightExpression": {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 2414,
                                                                            "name": "aggregateGasleft",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3329,
                                                                            "src": "15254:16:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                                "typeString": "function () view returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 2415,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15254:18:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "15233:39:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2417,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15308:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2418,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "maxPossibleGas",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1957,
                                                                    "src": "15308:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes4",
                                                                        "typeString": "bytes4"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_string_calldata_ptr",
                                                                        "typeString": "string calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 2401,
                                                                    "name": "abi",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967295,
                                                                    "src": "15081:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_abi",
                                                                        "typeString": "abi"
                                                                    }
                                                                },
                                                                "id": 2402,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "encodeWithSelector",
                                                                "nodeType": "MemberAccess",
                                                                "src": "15081:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                                }
                                                            },
                                                            "id": 2419,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "15081:260:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 2395,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4294967268,
                                                                        "src": "15033:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                            "typeString": "contract RelayHub"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                            "typeString": "contract RelayHub"
                                                                        }
                                                                    ],
                                                                    "id": 2394,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "15025:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2393,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "15025:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 2396,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "15025:13:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 2397,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "15025:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 2400,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "expression": {
                                                                    "id": 2398,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "15048:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2399,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "innerGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1959,
                                                                "src": "15048:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "15025:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2420,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15025:326:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "14986:365:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2422,
                                            "nodeType": "ExpressionStatement",
                                            "src": "14986:365:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2431,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2423,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "15361:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2425,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1955,
                                                    "src": "15361:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2430,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 2426,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "15381:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2427,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasBeforeInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1961,
                                                        "src": "15381:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 2428,
                                                            "name": "aggregateGasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3329,
                                                            "src": "15401:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 2429,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "15401:18:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "15381:38:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "15361:58:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2432,
                                            "nodeType": "ExpressionStatement",
                                            "src": "15361:58:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2448,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2433,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15430:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2435,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "status",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1953,
                                                            "src": "15430:11:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2436,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15443:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2437,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1947,
                                                            "src": "15443:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2438,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15429:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2441,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15485:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2442,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayCallStatus",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1975,
                                                            "src": "15485:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "components": [
                                                                {
                                                                    "id": 2443,
                                                                    "name": "RelayCallStatus",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5668,
                                                                    "src": "15508:15:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2445,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "15525:5:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2444,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "15525:5:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2446,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "15507:24:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$5668_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$5668_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2439,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967295,
                                                            "src": "15474:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2440,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "src": "15474:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 2447,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15474:58:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "src": "15429:103:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2449,
                                            "nodeType": "ExpressionStatement",
                                            "src": "15429:103:4"
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2454,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2450,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "15547:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2451,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallReturnValue",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1947,
                                                        "src": "15547:27:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 2452,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "15547:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 2453,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15582:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "15547:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2463,
                                            "nodeType": "IfStatement",
                                            "src": "15542:133:4",
                                            "trueBody": {
                                                "id": 2462,
                                                "nodeType": "Block",
                                                "src": "15586:89:4",
                                                "statements": [
                                                    {
                                                        "eventCall": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2456,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15623:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2457,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "15623:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2458,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15636:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2459,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1947,
                                                                    "src": "15636:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2455,
                                                                "name": "TransactionResult",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5648,
                                                                "src": "15605:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_event_nonpayable$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                }
                                                            },
                                                            "id": 2460,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "15605:59:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2461,
                                                        "nodeType": "EmitStatement",
                                                        "src": "15600:64:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "id": 2675,
                                    "nodeType": "Block",
                                    "src": "15686:2559:4",
                                    "statements": [
                                        {
                                            "condition": {
                                                "id": 2467,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "15700:13:4",
                                                "subExpression": {
                                                    "expression": {
                                                        "id": 2465,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "15701:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2466,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1939,
                                                    "src": "15701:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2533,
                                            "nodeType": "IfStatement",
                                            "src": "15696:1054:4",
                                            "trueBody": {
                                                "id": 2532,
                                                "nodeType": "Block",
                                                "src": "15715:1035:4",
                                                "statements": [
                                                    {
                                                        "condition": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 2497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                },
                                                                "id": 2472,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "id": 2468,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15786:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2469,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "15786:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "==",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2470,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "15801:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2471,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5663,
                                                                    "src": "15801:36:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                "src": "15786:51:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "||",
                                                            "rightExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                "id": 2496,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "components": [
                                                                        {
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            },
                                                                            "id": 2482,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "expression": {
                                                                                    "id": 2473,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "15862:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2474,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1955,
                                                                                "src": "15862:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "<=",
                                                                            "rightExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                "id": 2481,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "expression": {
                                                                                            "id": 2475,
                                                                                            "name": "vars",
                                                                                            "nodeType": "Identifier",
                                                                                            "overloadedDeclarations": [],
                                                                                            "referencedDeclaration": 2003,
                                                                                            "src": "15883:4:4",
                                                                                            "typeDescriptions": {
                                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                                            }
                                                                                        },
                                                                                        "id": 2476,
                                                                                        "isConstant": false,
                                                                                        "isLValue": true,
                                                                                        "isPure": false,
                                                                                        "lValueRequested": false,
                                                                                        "memberName": "gasAndDataLimits",
                                                                                        "nodeType": "MemberAccess",
                                                                                        "referencedDeclaration": 1950,
                                                                                        "src": "15883:21:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2477,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "acceptanceBudget",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5384,
                                                                                    "src": "15883:38:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_uint256",
                                                                                        "typeString": "uint256"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "+",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "expression": {
                                                                                            "id": 2478,
                                                                                            "name": "relayRequest",
                                                                                            "nodeType": "Identifier",
                                                                                            "overloadedDeclarations": [],
                                                                                            "referencedDeclaration": 1984,
                                                                                            "src": "15924:12:4",
                                                                                            "typeDescriptions": {
                                                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                            }
                                                                                        },
                                                                                        "id": 2479,
                                                                                        "isConstant": false,
                                                                                        "isLValue": false,
                                                                                        "isPure": false,
                                                                                        "lValueRequested": false,
                                                                                        "memberName": "relayData",
                                                                                        "nodeType": "MemberAccess",
                                                                                        "referencedDeclaration": 8490,
                                                                                        "src": "15924:22:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2480,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "transactionCalldataGasUsed",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8473,
                                                                                    "src": "15924:49:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_uint256",
                                                                                        "typeString": "uint256"
                                                                                    }
                                                                                },
                                                                                "src": "15883:90:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "src": "15862:111:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 2483,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "15861:113:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "&&",
                                                                "rightExpression": {
                                                                    "components": [
                                                                        {
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "id": 2494,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 2488,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "id": 2484,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 2003,
                                                                                        "src": "16000:4:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2485,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1953,
                                                                                    "src": "16000:11:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "id": 2486,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 5668,
                                                                                        "src": "16015:15:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 2487,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByForwarder",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5664,
                                                                                    "src": "16015:35:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "16000:50:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "||",
                                                                            "rightExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 2493,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "id": 2489,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 2003,
                                                                                        "src": "16074:4:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2490,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1953,
                                                                                    "src": "16074:11:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "id": 2491,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 5668,
                                                                                        "src": "16089:15:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 2492,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByRecipientRevert",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5665,
                                                                                    "src": "16089:41:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "16074:56:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "src": "16000:130:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 2495,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "15978:225:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "src": "15861:342:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "15786:417:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "id": 2531,
                                                        "nodeType": "IfStatement",
                                                        "src": "15782:958:4",
                                                        "trueBody": {
                                                            "id": 2530,
                                                            "nodeType": "Block",
                                                            "src": "16205:535:4",
                                                            "statements": [
                                                                {
                                                                    "eventCall": {
                                                                        "arguments": [
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2499,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16280:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2500,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayManager",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1969,
                                                                                "src": "16280:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2501,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16319:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2502,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "relayData",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8490,
                                                                                    "src": "16319:22:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2503,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "paymaster",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 8477,
                                                                                "src": "16319:32:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2504,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16373:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2505,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayRequestId",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1971,
                                                                                "src": "16373:19:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes32",
                                                                                    "typeString": "bytes32"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2506,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16414:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2507,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8487,
                                                                                    "src": "16414:20:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2508,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "from",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 5045,
                                                                                "src": "16414:25:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2509,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16461:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2510,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8487,
                                                                                    "src": "16461:20:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2511,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "to",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 5047,
                                                                                "src": "16461:23:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2512,
                                                                                    "name": "msg",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 4294967281,
                                                                                    "src": "16506:3:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_magic_message",
                                                                                        "typeString": "msg"
                                                                                    }
                                                                                },
                                                                                "id": 2513,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "sender",
                                                                                "nodeType": "MemberAccess",
                                                                                "src": "16506:10:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2514,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16538:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2515,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "functionSelector",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1941,
                                                                                "src": "16538:21:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2516,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16581:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2517,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1955,
                                                                                "src": "16581:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2518,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16620:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2519,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1947,
                                                                                "src": "16620:27:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes32",
                                                                                    "typeString": "bytes32"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            ],
                                                                            "id": 2498,
                                                                            "name": "TransactionRejectedByPaymaster",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 5618,
                                                                            "src": "16228:30:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                                                                "typeString": "function (address,address,bytes32,address,address,address,bytes4,uint256,bytes memory)"
                                                                            }
                                                                        },
                                                                        "id": 2520,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "16228:420:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$__$",
                                                                            "typeString": "tuple()"
                                                                        }
                                                                    },
                                                                    "id": 2521,
                                                                    "nodeType": "EmitStatement",
                                                                    "src": "16223:425:4"
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "components": [
                                                                            {
                                                                                "hexValue": "66616c7365",
                                                                                "id": 2522,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "bool",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "16674:5:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                },
                                                                                "value": "false"
                                                                            },
                                                                            {
                                                                                "hexValue": "30",
                                                                                "id": 2523,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "number",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "16681:1:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                },
                                                                                "value": "0"
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2524,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16684:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2525,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "status",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1953,
                                                                                "src": "16684:11:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2526,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16697:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2527,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1947,
                                                                                "src": "16697:27:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "id": 2528,
                                                                        "isConstant": false,
                                                                        "isInlineArray": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "nodeType": "TupleExpression",
                                                                        "src": "16673:52:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "tuple(bool,int_const 0,enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                        }
                                                                    },
                                                                    "functionReturnParameters": 2000,
                                                                    "id": 2529,
                                                                    "nodeType": "Return",
                                                                    "src": "16666:59:4"
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "id": 2550,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2534,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "16848:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2536,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1963,
                                                    "src": "16848:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2549,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2546,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2537,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "16863:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2538,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "16863:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2539,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transactionCalldataGasUsed",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8473,
                                                            "src": "16863:49:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "components": [
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 2544,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 2540,
                                                                            "name": "vars",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 2003,
                                                                            "src": "16916:4:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                            }
                                                                        },
                                                                        "id": 2541,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "initialGasLeft",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 1943,
                                                                        "src": "16916:19:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "-",
                                                                    "rightExpression": {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 2542,
                                                                            "name": "aggregateGasleft",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3329,
                                                                            "src": "16938:16:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                                "typeString": "function () view returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 2543,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "16938:18:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "16916:40:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2545,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "16915:42:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "16863:94:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2547,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "16960:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2548,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasOverhead",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5545,
                                                        "src": "16960:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "16863:115:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "16848:130:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2551,
                                            "nodeType": "ExpressionStatement",
                                            "src": "16848:130:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2559,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "id": 2552,
                                                    "name": "charge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1994,
                                                    "src": "16988:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2554,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "17013:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2555,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "gasUsed",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1963,
                                                            "src": "17013:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2556,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17027:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2557,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17027:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        ],
                                                        "id": 2553,
                                                        "name": "calculateCharge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3073,
                                                        "src": "16997:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2558,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "16997:53:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "16988:62:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2560,
                                            "nodeType": "ExpressionStatement",
                                            "src": "16988:62:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2567,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2561,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "17060:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2563,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "devCharge",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1965,
                                                    "src": "17060:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2565,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1994,
                                                            "src": "17096:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 2564,
                                                        "name": "calculateDevCharge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3007,
                                                        "src": "17077:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256) view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2566,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "17077:26:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17060:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2568,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17060:43:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2581,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "baseExpression": {
                                                        "id": 2569,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "17114:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2573,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2570,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17123:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2571,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17123:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 2572,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "17123:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17114:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2580,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 2574,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "17159:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 2578,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2575,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "17168:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2576,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "17168:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2577,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8477,
                                                            "src": "17168:32:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17159:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "id": 2579,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1994,
                                                        "src": "17204:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17159:51:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17114:96:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2582,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17114:96:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2597,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "baseExpression": {
                                                        "id": 2583,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "17220:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2586,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 2584,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "17229:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2585,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayManager",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1969,
                                                        "src": "17229:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17220:27:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2596,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 2587,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "17250:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 2590,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 2588,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "17259:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2589,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayManager",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1969,
                                                            "src": "17259:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17250:27:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "components": [
                                                            {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2594,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 2591,
                                                                    "name": "charge",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1994,
                                                                    "src": "17281:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2592,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "17290:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2593,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devCharge",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1965,
                                                                    "src": "17290:14:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "17281:23:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 2595,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "17280:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17250:55:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17220:85:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2598,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17220:85:4"
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2602,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2599,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "17319:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2600,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devCharge",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1965,
                                                    "src": "17319:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 2601,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17336:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "17319:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2617,
                                            "nodeType": "IfStatement",
                                            "src": "17315:167:4",
                                            "trueBody": {
                                                "id": 2616,
                                                "nodeType": "Block",
                                                "src": "17339:143:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "id": 2614,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftHandSide": {
                                                                "baseExpression": {
                                                                    "id": 2603,
                                                                    "name": "balances",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1350,
                                                                    "src": "17397:8:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                        "typeString": "mapping(address => uint256)"
                                                                    }
                                                                },
                                                                "id": 2606,
                                                                "indexExpression": {
                                                                    "expression": {
                                                                        "id": 2604,
                                                                        "name": "config",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1236,
                                                                        "src": "17406:6:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                        }
                                                                    },
                                                                    "id": 2605,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devAddress",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5549,
                                                                    "src": "17406:17:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": true,
                                                                "nodeType": "IndexAccess",
                                                                "src": "17397:27:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "Assignment",
                                                            "operator": "=",
                                                            "rightHandSide": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2613,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "baseExpression": {
                                                                        "id": 2607,
                                                                        "name": "balances",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1350,
                                                                        "src": "17427:8:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                            "typeString": "mapping(address => uint256)"
                                                                        }
                                                                    },
                                                                    "id": 2610,
                                                                    "indexExpression": {
                                                                        "expression": {
                                                                            "id": 2608,
                                                                            "name": "config",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1236,
                                                                            "src": "17436:6:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                            }
                                                                        },
                                                                        "id": 2609,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "devAddress",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5549,
                                                                        "src": "17436:17:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "17427:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "+",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2611,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "17457:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2612,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devCharge",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1965,
                                                                    "src": "17457:14:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "17427:44:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "17397:74:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 2615,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "17397:74:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "id": 2653,
                                            "nodeType": "Block",
                                            "src": "17492:480:4",
                                            "statements": [
                                                {
                                                    "assignments": [
                                                        2619
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2619,
                                                            "mutability": "mutable",
                                                            "name": "from",
                                                            "nameLocation": "17514:4:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17506:12:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2618,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17506:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2623,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2620,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17521:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2621,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "17521:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2622,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "17521:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17506:40:4"
                                                },
                                                {
                                                    "assignments": [
                                                        2625
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2625,
                                                            "mutability": "mutable",
                                                            "name": "to",
                                                            "nameLocation": "17568:2:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17560:10:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2624,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17560:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2629,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2626,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17573:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2627,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "17573:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2628,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5047,
                                                        "src": "17573:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17560:36:4"
                                                },
                                                {
                                                    "assignments": [
                                                        2631
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2631,
                                                            "mutability": "mutable",
                                                            "name": "paymaster",
                                                            "nameLocation": "17618:9:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17610:17:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2630,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17610:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2635,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2632,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17630:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2633,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17630:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 2634,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "17630:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17610:52:4"
                                                },
                                                {
                                                    "eventCall": {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 2637,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17717:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2638,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayManager",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1969,
                                                                "src": "17717:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2639,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "17752:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2640,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "17752:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2641,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17780:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2642,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayRequestId",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1971,
                                                                "src": "17780:19:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                }
                                                            },
                                                            {
                                                                "id": 2643,
                                                                "name": "from",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2619,
                                                                "src": "17817:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "id": 2644,
                                                                "name": "to",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2625,
                                                                "src": "17839:2:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "id": 2645,
                                                                "name": "paymaster",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2631,
                                                                "src": "17859:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2646,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17886:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2647,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "functionSelector",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1941,
                                                                "src": "17886:21:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2648,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17925:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2649,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "status",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1953,
                                                                "src": "17925:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                }
                                                            },
                                                            {
                                                                "id": 2650,
                                                                "name": "charge",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1994,
                                                                "src": "17954:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "id": 2636,
                                                            "name": "TransactionRelayed",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5640,
                                                            "src": "17681:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_enum$_RelayCallStatus_$5668_$_t_uint256_$returns$__$",
                                                                "typeString": "function (address,address,bytes32,address,address,address,bytes4,enum IRelayHub.RelayCallStatus,uint256)"
                                                            }
                                                        },
                                                        "id": 2651,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "17681:280:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_tuple$__$",
                                                            "typeString": "tuple()"
                                                        }
                                                    },
                                                    "id": 2652,
                                                    "nodeType": "EmitStatement",
                                                    "src": "17676:285:4"
                                                }
                                            ]
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2657,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2654,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967270,
                                                        "src": "18073:2:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 2655,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "origin",
                                                    "nodeType": "MemberAccess",
                                                    "src": "18073:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 2656,
                                                    "name": "DRY_RUN_ADDRESS",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1214,
                                                    "src": "18086:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "18073:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2667,
                                            "nodeType": "IfStatement",
                                            "src": "18069:122:4",
                                            "trueBody": {
                                                "id": 2666,
                                                "nodeType": "Block",
                                                "src": "18103:88:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "components": [
                                                                {
                                                                    "hexValue": "74727565",
                                                                    "id": 2658,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "bool",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "18125:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    },
                                                                    "value": "true"
                                                                },
                                                                {
                                                                    "id": 2659,
                                                                    "name": "charge",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1994,
                                                                    "src": "18131:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2660,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "18139:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2661,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "18139:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2662,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "18152:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2663,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1947,
                                                                    "src": "18152:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2664,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "18124:56:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                "typeString": "tuple(bool,uint256,enum IRelayHub.RelayCallStatus,bytes memory)"
                                                            }
                                                        },
                                                        "functionReturnParameters": 2000,
                                                        "id": 2665,
                                                        "nodeType": "Return",
                                                        "src": "18117:63:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "components": [
                                                    {
                                                        "hexValue": "74727565",
                                                        "id": 2668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "bool",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "18208:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "value": "true"
                                                    },
                                                    {
                                                        "id": 2669,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1994,
                                                        "src": "18214:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "expression": {
                                                            "id": 2670,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "18222:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2671,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "status",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1953,
                                                        "src": "18222:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "",
                                                        "id": 2672,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "18235:2:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                            "typeString": "literal_string \"\""
                                                        },
                                                        "value": ""
                                                    }
                                                ],
                                                "id": 2673,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "18207:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_enum$_RelayCallStatus_$5668_$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$",
                                                    "typeString": "tuple(bool,uint256,enum IRelayHub.RelayCallStatus,literal_string \"\")"
                                                }
                                            },
                                            "functionReturnParameters": 2000,
                                            "id": 2674,
                                            "nodeType": "Return",
                                            "src": "18200:38:4"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1977,
                            "nodeType": "StructuredDocumentation",
                            "src": "9808:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "6ca862e2",
                        "id": 2677,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nameLocation": "9847:9:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1990,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "10086:8:4"
                        },
                        "parameters": {
                            "id": 1989,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1979,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "9882:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9866:35:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 1978,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9866:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1981,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "9919:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9911:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1980,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9911:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1984,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "9979:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9948:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 1983,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1982,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "9948:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "9948:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1986,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "10016:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10001:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1985,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10001:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1988,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "10050:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10035:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1987,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10035:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9856:212:4"
                        },
                        "returnParameters": {
                            "id": 2000,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1992,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nameLocation": "10122:17:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10117:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1991,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10117:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1994,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "10157:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10149:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1993,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10149:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1997,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "10199:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10173:32:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 1996,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1995,
                                            "name": "IRelayHub.RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "10173:25:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "10173:25:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1999,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "10228:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10215:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1998,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10215:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10107:133:4"
                        },
                        "scope": 3330,
                        "src": "9838:8413:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "canonicalName": "RelayHub.InnerRelayCallData",
                        "id": 2696,
                        "members": [
                            {
                                "constant": false,
                                "id": 2679,
                                "mutability": "mutable",
                                "name": "initialGasLeft",
                                "nameLocation": "18301:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18293:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2678,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18293:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2681,
                                "mutability": "mutable",
                                "name": "gasUsedToCallInner",
                                "nameLocation": "18333:18:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18325:26:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2680,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18325:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2683,
                                "mutability": "mutable",
                                "name": "balanceBefore",
                                "nameLocation": "18369:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18361:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2682,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18361:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2685,
                                "mutability": "mutable",
                                "name": "preReturnValue",
                                "nameLocation": "18400:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18392:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 2684,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18392:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2687,
                                "mutability": "mutable",
                                "name": "relayedCallSuccess",
                                "nameLocation": "18429:18:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18424:23:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 2686,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18424:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2689,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nameLocation": "18463:22:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18457:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2688,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18457:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2691,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nameLocation": "18501:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18495:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2690,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18495:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2693,
                                "mutability": "mutable",
                                "name": "data",
                                "nameLocation": "18533:4:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18527:10:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2692,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18527:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2695,
                                "mutability": "mutable",
                                "name": "rejectOnRecipientRevert",
                                "nameLocation": "18552:23:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18547:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 2694,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18547:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "InnerRelayCallData",
                        "nameLocation": "18264:18:4",
                        "nodeType": "StructDefinition",
                        "scope": 3330,
                        "src": "18257:325:4",
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 2955,
                            "nodeType": "Block",
                            "src": "19141:3786:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2723
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2723,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nameLocation": "19177:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2955,
                                            "src": "19151:30:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                "typeString": "struct RelayHub.InnerRelayCallData"
                                            },
                                            "typeName": {
                                                "id": 2722,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 2721,
                                                    "name": "InnerRelayCallData",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 2696,
                                                    "src": "19151:18:4"
                                                },
                                                "referencedDeclaration": 2696,
                                                "src": "19151:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_storage_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2724,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "19151:30:4"
                                },
                                {
                                    "expression": {
                                        "id": 2730,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2725,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "19191:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2727,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "initialGasLeft",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2679,
                                            "src": "19191:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 2728,
                                                "name": "aggregateGasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3329,
                                                "src": "19213:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 2729,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "19213:18:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "19191:40:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2731,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19191:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 2739,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2732,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "19241:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2734,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "gasUsedToCallInner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2681,
                                            "src": "19241:23:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 2738,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 2735,
                                                "name": "totalInitialGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2711,
                                                "src": "19267:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 2736,
                                                    "name": "gasleft",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967289,
                                                    "src": "19285:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 2737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "19285:9:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "19267:27:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "19241:53:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2740,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19241:53:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2748,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2742,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "19722:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2743,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "19722:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 2746,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "19744:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        ],
                                                        "id": 2745,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "19736:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 2744,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "19736:7:4",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 2747,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "19736:13:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "19722:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4d7573742062652063616c6c65642062792052656c6179487562",
                                                "id": 2749,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "19751:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_357649a60de2e9c2a59a14b958d360a6a42d357567b87c3fe1a024ac8c9ded0d",
                                                    "typeString": "literal_string \"Must be called by RelayHub\""
                                                },
                                                "value": "Must be called by RelayHub"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_357649a60de2e9c2a59a14b958d360a6a42d357567b87c3fe1a024ac8c9ded0d",
                                                    "typeString": "literal_string \"Must be called by RelayHub\""
                                                }
                                            ],
                                            "id": 2741,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "19714:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2750,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "19714:66:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2751,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19714:66:4"
                                },
                                {
                                    "expression": {
                                        "id": 2760,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2752,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "20179:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2754,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2683,
                                            "src": "20179:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "baseExpression": {
                                                "id": 2755,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "20200:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2759,
                                            "indexExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2756,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "20209:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2757,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "20209:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2758,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "20209:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "20200:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "20179:63:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2761,
                                    "nodeType": "ExpressionStatement",
                                    "src": "20179:63:4"
                                },
                                {
                                    "expression": {
                                        "id": 2775,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2762,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "20372:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2764,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2693,
                                            "src": "20372:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2767,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "20420:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 2768,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "preRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5427,
                                                        "src": "20420:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bool_$",
                                                            "typeString": "function IPaymaster.preRelayedCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bytes memory,bool)"
                                                        }
                                                    },
                                                    "id": 2769,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "20420:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "id": 2770,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2702,
                                                    "src": "20468:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2771,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2704,
                                                    "src": "20482:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2772,
                                                    "name": "approvalData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2706,
                                                    "src": "20493:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2773,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2713,
                                                    "src": "20507:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2765,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967295,
                                                    "src": "20384:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 2766,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "src": "20384:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 2774,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "20384:147:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "20372:159:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 2776,
                                    "nodeType": "ExpressionStatement",
                                    "src": "20372:159:4"
                                },
                                {
                                    "id": 2831,
                                    "nodeType": "Block",
                                    "src": "20541:484:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2778
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2778,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nameLocation": "20560:7:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2831,
                                                    "src": "20555:12:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2777,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "20555:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2779,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "20555:12:4"
                                        },
                                        {
                                            "assignments": [
                                                2781
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2781,
                                                    "mutability": "mutable",
                                                    "name": "retData",
                                                    "nameLocation": "20594:7:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2831,
                                                    "src": "20581:20:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 2780,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "20581:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2782,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "20581:20:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2796,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "id": 2783,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2778,
                                                            "src": "20616:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "id": 2784,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2781,
                                                            "src": "20625:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2785,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "20615:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2793,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20719:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2794,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2693,
                                                            "src": "20719:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 2786,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2702,
                                                                        "src": "20636:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 2787,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "20636:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 2788,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8477,
                                                                "src": "20636:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 2789,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "20636:37:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 2792,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "expression": {
                                                                    "id": 2790,
                                                                    "name": "gasAndDataLimits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2709,
                                                                    "src": "20678:16:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits calldata"
                                                                    }
                                                                },
                                                                "id": 2791,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "preRelayedCallGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5386,
                                                                "src": "20678:39:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "20636:82:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2795,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "20636:93:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "20615:114:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2797,
                                            "nodeType": "ExpressionStatement",
                                            "src": "20615:114:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2799,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "20747:8:4",
                                                "subExpression": {
                                                    "id": 2798,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2778,
                                                    "src": "20748:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2813,
                                            "nodeType": "IfStatement",
                                            "src": "20743:169:4",
                                            "trueBody": {
                                                "id": 2812,
                                                "nodeType": "Block",
                                                "src": "20757:155:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "id": 2803,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2781,
                                                                    "src": "20808:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 2800,
                                                                    "name": "GsnEip712Library",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 8464,
                                                                    "src": "20775:16:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                                        "typeString": "type(library GsnEip712Library)"
                                                                    }
                                                                },
                                                                "id": 2802,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "truncateInPlace",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8368,
                                                                "src": "20775:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2804,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "20775:41:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2805,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "20775:41:4"
                                                    },
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2807,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "20851:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2808,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5663,
                                                                    "src": "20851:36:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2809,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2781,
                                                                    "src": "20889:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2806,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "20834:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2810,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "20834:63:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2811,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "20834:63:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "id": 2829,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2814,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20926:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2816,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "recipientContext",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2691,
                                                            "src": "20926:21:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2817,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20949:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2818,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "rejectOnRecipientRevert",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2695,
                                                            "src": "20949:28:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2819,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "20925:53:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2822,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2781,
                                                            "src": "20992:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "components": [
                                                                {
                                                                    "id": 2824,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "21002:5:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2823,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "21002:5:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2826,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "21008:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2825,
                                                                        "name": "bool",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "21008:4:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2827,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "21001:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2820,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967295,
                                                            "src": "20981:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2821,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "src": "20981:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 2828,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "20981:33:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "src": "20925:89:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2830,
                                            "nodeType": "ExpressionStatement",
                                            "src": "20925:89:4"
                                        }
                                    ]
                                },
                                {
                                    "id": 2875,
                                    "nodeType": "Block",
                                    "src": "21156:619:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2833
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2833,
                                                    "mutability": "mutable",
                                                    "name": "forwarderSuccess",
                                                    "nameLocation": "21175:16:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2875,
                                                    "src": "21170:21:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2832,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "21170:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2834,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "21170:21:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2847,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "id": 2835,
                                                            "name": "forwarderSuccess",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2833,
                                                            "src": "21206:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2836,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "21224:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2837,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallSuccess",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2687,
                                                            "src": "21224:23:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2838,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "21249:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2839,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2689,
                                                            "src": "21249:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2840,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "21205:72:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2843,
                                                            "name": "domainSeparatorName",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2699,
                                                            "src": "21305:19:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_string_calldata_ptr",
                                                                "typeString": "string calldata"
                                                            }
                                                        },
                                                        {
                                                            "id": 2844,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2702,
                                                            "src": "21326:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        {
                                                            "id": 2845,
                                                            "name": "signature",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2704,
                                                            "src": "21340:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_string_calldata_ptr",
                                                                "typeString": "string calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2841,
                                                            "name": "GsnEip712Library",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8464,
                                                            "src": "21280:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                                "typeString": "type(library GsnEip712Library)"
                                                            }
                                                        },
                                                        "id": 2842,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "execute",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8355,
                                                        "src": "21280:24:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (string memory,struct GsnTypes.RelayRequest calldata,bytes calldata) returns (bool,bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2846,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "21280:70:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "src": "21205:145:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2848,
                                            "nodeType": "ExpressionStatement",
                                            "src": "21205:145:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2850,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "21369:17:4",
                                                "subExpression": {
                                                    "id": 2849,
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2833,
                                                    "src": "21370:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2859,
                                            "nodeType": "IfStatement",
                                            "src": "21364:140:4",
                                            "trueBody": {
                                                "id": 2858,
                                                "nodeType": "Block",
                                                "src": "21389:115:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2852,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "21424:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2853,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByForwarder",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5664,
                                                                    "src": "21424:35:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2854,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "21461:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2855,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2689,
                                                                    "src": "21461:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2851,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "21407:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2856,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "21407:82:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2857,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "21407:82:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 2865,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2860,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "21522:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2861,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "rejectOnRecipientRevert",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2695,
                                                    "src": "21522:28:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "id": 2864,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "21554:24:4",
                                                    "subExpression": {
                                                        "expression": {
                                                            "id": 2862,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "21555:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2863,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallSuccess",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2687,
                                                        "src": "21555:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "21522:56:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2874,
                                            "nodeType": "IfStatement",
                                            "src": "21518:247:4",
                                            "trueBody": {
                                                "id": 2873,
                                                "nodeType": "Block",
                                                "src": "21580:185:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2867,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "21679:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2868,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByRecipientRevert",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5665,
                                                                    "src": "21679:41:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2869,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "21722:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2870,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2689,
                                                                    "src": "21722:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2866,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "21662:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2871,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "21662:88:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2872,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "21662:88:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "id": 2900,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2876,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "22037:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2878,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2693,
                                            "src": "22037:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2881,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "22085:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 2882,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "postRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5440,
                                                        "src": "22085:26:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$__$",
                                                            "typeString": "function IPaymaster.postRelayedCall(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                                        }
                                                    },
                                                    "id": 2883,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "22085:35:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2884,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22134:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2885,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "recipientContext",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2691,
                                                    "src": "22134:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2886,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22169:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2887,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2687,
                                                    "src": "22169:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2896,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 2888,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "22206:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2889,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasUsedToCallInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2681,
                                                        "src": "22206:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "components": [
                                                            {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2894,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "id": 2890,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "22233:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2891,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "initialGasLeft",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2679,
                                                                    "src": "22233:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "arguments": [],
                                                                    "expression": {
                                                                        "argumentTypes": [],
                                                                        "id": 2892,
                                                                        "name": "aggregateGasleft",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3329,
                                                                        "src": "22255:16:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                            "typeString": "function () view returns (uint256)"
                                                                        }
                                                                    },
                                                                    "id": 2893,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "22255:18:4",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "22233:40:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 2895,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "22232:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "22206:68:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2897,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "22310:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2898,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "22310:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2879,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967295,
                                                    "src": "22049:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 2880,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "src": "22049:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 2899,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "22049:293:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "22037:305:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 2901,
                                    "nodeType": "ExpressionStatement",
                                    "src": "22037:305:4"
                                },
                                {
                                    "id": 2927,
                                    "nodeType": "Block",
                                    "src": "22353:274:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2903,
                                                2905
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2903,
                                                    "mutability": "mutable",
                                                    "name": "successPost",
                                                    "nameLocation": "22369:11:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2927,
                                                    "src": "22364:16:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2902,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "22364:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 2905,
                                                    "mutability": "mutable",
                                                    "name": "ret",
                                                    "nameLocation": "22394:3:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2927,
                                                    "src": "22381:16:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 2904,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "22381:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2916,
                                            "initialValue": {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 2913,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "22485:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2914,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2693,
                                                        "src": "22485:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2906,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2702,
                                                                    "src": "22401:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2907,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "22401:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2908,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8477,
                                                            "src": "22401:32:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 2909,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "src": "22401:37:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2912,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "expression": {
                                                                "id": 2910,
                                                                "name": "gasAndDataLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2709,
                                                                "src": "22443:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits calldata"
                                                                }
                                                            },
                                                            "id": 2911,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5388,
                                                            "src": "22443:40:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "22401:83:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 2915,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "22401:94:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "22363:132:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2918,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "22514:12:4",
                                                "subExpression": {
                                                    "id": 2917,
                                                    "name": "successPost",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2903,
                                                    "src": "22515:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2926,
                                            "nodeType": "IfStatement",
                                            "src": "22510:107:4",
                                            "trueBody": {
                                                "id": 2925,
                                                "nodeType": "Block",
                                                "src": "22528:89:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2920,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "22563:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2921,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "PostRelayedFailed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5666,
                                                                    "src": "22563:33:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2922,
                                                                    "name": "ret",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2905,
                                                                    "src": "22598:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2919,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "22546:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2923,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "22546:56:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2924,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "22546:56:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "baseExpression": {
                                                "id": 2928,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "22641:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2932,
                                            "indexExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2929,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "22650:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2930,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "22650:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2931,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "22650:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22641:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 2933,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "22686:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2934,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2683,
                                            "src": "22686:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "22641:63:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2943,
                                    "nodeType": "IfStatement",
                                    "src": "22637:155:4",
                                    "trueBody": {
                                        "id": 2942,
                                        "nodeType": "Block",
                                        "src": "22706:86:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2937,
                                                                "name": "RelayCallStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5668,
                                                                "src": "22737:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                    "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                }
                                                            },
                                                            "id": 2938,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "PaymasterBalanceChanged",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5667,
                                                            "src": "22737:39:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "",
                                                            "id": 2939,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "22778:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "id": 2936,
                                                        "name": "revertWithStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2981,
                                                        "src": "22720:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                        }
                                                    },
                                                    "id": 2940,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "22720:61:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2941,
                                                "nodeType": "ExpressionStatement",
                                                "src": "22720:61:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "condition": {
                                                    "expression": {
                                                        "id": 2944,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22810:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2945,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2687,
                                                    "src": "22810:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseExpression": {
                                                    "expression": {
                                                        "id": 2948,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5668,
                                                        "src": "22857:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 2949,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "RelayedCallFailed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5662,
                                                    "src": "22857:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "id": 2950,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "Conditional",
                                                "src": "22810:80:4",
                                                "trueExpression": {
                                                    "expression": {
                                                        "id": 2946,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5668,
                                                        "src": "22836:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 2947,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "OK",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5661,
                                                    "src": "22836:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 2951,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2723,
                                                    "src": "22892:4:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                        "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                    }
                                                },
                                                "id": 2952,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayedCallReturnValue",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 2689,
                                                "src": "22892:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 2953,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "22809:111:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 2720,
                                    "id": 2954,
                                    "nodeType": "Return",
                                    "src": "22802:118:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2697,
                            "nodeType": "StructuredDocumentation",
                            "src": "18588:160:4",
                            "text": " @notice This method can only by called by this `RelayHub`.\n It wraps the execution of the `RelayRequest` in a revertable frame context."
                        },
                        "functionSelector": "a6e61b60",
                        "id": 2956,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "innerRelayCall",
                        "nameLocation": "18762:14:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2714,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2699,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "18802:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18786:35:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2698,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18786:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2702,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "18862:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18831:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 2701,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2700,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "18831:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "18831:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2704,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "18899:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18884:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2703,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18884:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2706,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "18933:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18918:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2705,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18918:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2709,
                                    "mutability": "mutable",
                                    "name": "gasAndDataLimits",
                                    "nameLocation": "18992:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18955:53:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 2708,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2707,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "18955:27:4"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "18955:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2711,
                                    "mutability": "mutable",
                                    "name": "totalInitialGas",
                                    "nameLocation": "19026:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19018:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2710,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19018:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2713,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "19059:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19051:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2712,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19051:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18776:303:4"
                        },
                        "returnParameters": {
                            "id": 2720,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2717,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19106:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 2716,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2715,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "19106:15:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "19106:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2719,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19123:12:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2718,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19123:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "19105:31:4"
                        },
                        "scope": 3330,
                        "src": "18753:4174:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2980,
                            "nodeType": "Block",
                            "src": "23155:258:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2966
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2966,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "nameLocation": "23178:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2980,
                                            "src": "23165:17:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 2965,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "23165:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2972,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 2969,
                                                "name": "status",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2960,
                                                "src": "23196:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "id": 2970,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2962,
                                                "src": "23204:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2967,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "23185:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2968,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "23185:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2971,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23185:23:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "23165:43:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2976,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2966,
                                                "src": "23251:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2973,
                                                "name": "GsnEip712Library",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8464,
                                                "src": "23218:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                    "typeString": "type(library GsnEip712Library)"
                                                }
                                            },
                                            "id": 2975,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "truncateInPlace",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8368,
                                            "src": "23218:32:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) pure"
                                            }
                                        },
                                        "id": 2977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23218:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2978,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23218:38:4"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "23276:131:4",
                                        "statements": [
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "23290:27:4",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23312:4:4"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23306:5:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23306:11:4"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataSize",
                                                        "nodeType": "YulTypedName",
                                                        "src": "23294:8:4",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "23330:28:4",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23349:4:4"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "23355:2:4",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23345:3:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23345:13:4"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataPtr",
                                                        "nodeType": "YulTypedName",
                                                        "src": "23334:7:4",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "name": "dataPtr",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23379:7:4"
                                                        },
                                                        {
                                                            "name": "dataSize",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23388:8:4"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23372:6:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23372:25:4"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "23372:25:4"
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 2966,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "23312:4:4",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 2966,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "23349:4:4",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 2979,
                                    "nodeType": "InlineAssembly",
                                    "src": "23267:140:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2957,
                            "nodeType": "StructuredDocumentation",
                            "src": "22933:136:4",
                            "text": " @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)"
                        },
                        "id": 2981,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "revertWithStatus",
                        "nameLocation": "23083:16:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2963,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2960,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "23116:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2981,
                                    "src": "23100:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 2959,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2958,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "23100:15:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "23100:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2962,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nameLocation": "23137:3:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2981,
                                    "src": "23124:16:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2961,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23124:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23099:42:4"
                        },
                        "returnParameters": {
                            "id": 2964,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "23155:0:4"
                        },
                        "scope": 3330,
                        "src": "23074:339:4",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            5786
                        ],
                        "body": {
                            "id": 3006,
                            "nodeType": "Block",
                            "src": "23539:191:4",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        },
                                        "id": 2993,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 2990,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "23553:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            },
                                            "id": 2991,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "devFee",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5551,
                                            "src": "23553:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 2992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "23570:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "23553:18:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2997,
                                    "nodeType": "IfStatement",
                                    "src": "23549:100:4",
                                    "trueBody": {
                                        "id": 2996,
                                        "nodeType": "Block",
                                        "src": "23572:77:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "hexValue": "30",
                                                    "id": 2994,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "23637:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "functionReturnParameters": 2989,
                                                "id": 2995,
                                                "nodeType": "Return",
                                                "src": "23630:8:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "id": 3005,
                                    "nodeType": "UncheckedBlock",
                                    "src": "23658:66:4",
                                    "statements": [
                                        {
                                            "expression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3003,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 3001,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 2998,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2984,
                                                        "src": "23685:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "*",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2999,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "23694:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 3000,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "devFee",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5551,
                                                        "src": "23694:13:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint8",
                                                            "typeString": "uint8"
                                                        }
                                                    },
                                                    "src": "23685:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "/",
                                                "rightExpression": {
                                                    "hexValue": "313030",
                                                    "id": 3002,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "23710:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_100_by_1",
                                                        "typeString": "int_const 100"
                                                    },
                                                    "value": "100"
                                                },
                                                "src": "23685:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "functionReturnParameters": 2989,
                                            "id": 3004,
                                            "nodeType": "Return",
                                            "src": "23678:35:4"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2982,
                            "nodeType": "StructuredDocumentation",
                            "src": "23419:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8ac3b845",
                        "id": 3007,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateDevCharge",
                        "nameLocation": "23458:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2986,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "23500:8:4"
                        },
                        "parameters": {
                            "id": 2985,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2984,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "23485:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3007,
                                    "src": "23477:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2983,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23477:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23476:16:4"
                        },
                        "returnParameters": {
                            "id": 2989,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2988,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3007,
                                    "src": "23531:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2987,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23531:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23530:9:4"
                        },
                        "scope": 3330,
                        "src": "23449:281:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5778
                        ],
                        "body": {
                            "id": 3072,
                            "nodeType": "Block",
                            "src": "23894:433:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3020
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3020,
                                            "mutability": "mutable",
                                            "name": "basefee",
                                            "nameLocation": "23912:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3072,
                                            "src": "23904:15:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3019,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "23904:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3021,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "23904:15:4"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3026,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3022,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3013,
                                                "src": "23933:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            },
                                            "id": 3023,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maxFeePerGas",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8469,
                                            "src": "23933:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 3024,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3013,
                                                "src": "23959:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            },
                                            "id": 3025,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maxPriorityFeePerGas",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8471,
                                            "src": "23959:30:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "23933:56:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 3037,
                                        "nodeType": "Block",
                                        "src": "24033:48:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 3035,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 3032,
                                                        "name": "basefee",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3020,
                                                        "src": "24047:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "expression": {
                                                            "id": 3033,
                                                            "name": "block",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967292,
                                                            "src": "24057:5:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_block",
                                                                "typeString": "block"
                                                            }
                                                        },
                                                        "id": 3034,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "basefee",
                                                        "nodeType": "MemberAccess",
                                                        "src": "24057:13:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "24047:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 3036,
                                                "nodeType": "ExpressionStatement",
                                                "src": "24047:23:4"
                                            }
                                        ]
                                    },
                                    "id": 3038,
                                    "nodeType": "IfStatement",
                                    "src": "23929:152:4",
                                    "trueBody": {
                                        "id": 3031,
                                        "nodeType": "Block",
                                        "src": "23991:36:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 3029,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 3027,
                                                        "name": "basefee",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3020,
                                                        "src": "24005:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "hexValue": "30",
                                                        "id": 3028,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "24015:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "24005:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 3030,
                                                "nodeType": "ExpressionStatement",
                                                "src": "24005:11:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        3040
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3040,
                                            "mutability": "mutable",
                                            "name": "chargeableGasPrice",
                                            "nameLocation": "24098:18:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3072,
                                            "src": "24090:26:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3039,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24090:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3055,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3043,
                                                    "name": "relayData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3013,
                                                    "src": "24128:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 3044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "24128:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 3047,
                                                            "name": "tx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967270,
                                                            "src": "24161:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_transaction",
                                                                "typeString": "tx"
                                                            }
                                                        },
                                                        "id": 3048,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasprice",
                                                        "nodeType": "MemberAccess",
                                                        "src": "24161:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 3052,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 3049,
                                                            "name": "basefee",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3020,
                                                            "src": "24174:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 3050,
                                                                "name": "relayData",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3013,
                                                                "src": "24184:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 3051,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "maxPriorityFeePerGas",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8471,
                                                            "src": "24184:30:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "24174:40:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 3045,
                                                        "name": "Math",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12856,
                                                        "src": "24152:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_Math_$12856_$",
                                                            "typeString": "type(library Math)"
                                                        }
                                                    },
                                                    "id": 3046,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "min",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12395,
                                                    "src": "24152:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 3053,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "24152:63:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3041,
                                                "name": "Math",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12856,
                                                "src": "24119:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_Math_$12856_$",
                                                    "typeString": "type(library Math)"
                                                }
                                            },
                                            "id": 3042,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "min",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12395,
                                            "src": "24119:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 3054,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24119:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24090:126:4"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3070,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3056,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "24233:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            },
                                            "id": 3057,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "baseRelayFee",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5553,
                                            "src": "24233:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint80",
                                                "typeString": "uint80"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3069,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "components": [
                                                    {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 3066,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 3060,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 3058,
                                                                "name": "gasUsed",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3010,
                                                                "src": "24256:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "id": 3059,
                                                                "name": "chargeableGasPrice",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3040,
                                                                "src": "24266:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "24256:28:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "components": [
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint16",
                                                                        "typeString": "uint16"
                                                                    },
                                                                    "id": 3064,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 3061,
                                                                            "name": "config",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1236,
                                                                            "src": "24288:6:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                            }
                                                                        },
                                                                        "id": 3062,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "pctRelayFee",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5555,
                                                                        "src": "24288:18:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint16",
                                                                            "typeString": "uint16"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "+",
                                                                    "rightExpression": {
                                                                        "hexValue": "313030",
                                                                        "id": 3063,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "24309:3:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_100_by_1",
                                                                            "typeString": "int_const 100"
                                                                        },
                                                                        "value": "100"
                                                                    },
                                                                    "src": "24288:24:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint16",
                                                                        "typeString": "uint16"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 3065,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "24287:26:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint16",
                                                                "typeString": "uint16"
                                                            }
                                                        },
                                                        "src": "24256:57:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "id": 3067,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "24255:59:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "/",
                                            "rightExpression": {
                                                "hexValue": "313030",
                                                "id": 3068,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24317:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_100_by_1",
                                                    "typeString": "int_const 100"
                                                },
                                                "value": "100"
                                            },
                                            "src": "24255:65:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "24233:87:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3018,
                                    "id": 3071,
                                    "nodeType": "Return",
                                    "src": "24226:94:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3008,
                            "nodeType": "StructuredDocumentation",
                            "src": "23736:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8e53548b",
                        "id": 3073,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nameLocation": "23775:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3015,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "23854:8:4"
                        },
                        "parameters": {
                            "id": 3014,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3010,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nameLocation": "23799:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23791:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3009,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23791:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3013,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "23836:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23808:37:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 3012,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3011,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "23808:18:4"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "23808:18:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23790:56:4"
                        },
                        "returnParameters": {
                            "id": 3018,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3017,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23885:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3016,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23885:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23884:9:4"
                        },
                        "scope": 3330,
                        "src": "23766:561:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5857
                        ],
                        "body": {
                            "id": 3149,
                            "nodeType": "Block",
                            "src": "24440:642:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3084,
                                        3086
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3084,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "24482:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24451:35:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3083,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3082,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "24451:23:4"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "24451:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 3086,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "24493:15:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24488:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 3085,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24488:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3091,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 3089,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3076,
                                                "src": "24538:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3087,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "24512:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3088,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6240,
                                            "src": "24512:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory,bool)"
                                            }
                                        },
                                        "id": 3090,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24512:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo memory,bool)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24450:101:4"
                                },
                                {
                                    "assignments": [
                                        3093
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3093,
                                            "mutability": "mutable",
                                            "name": "minimumStake",
                                            "nameLocation": "24569:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24561:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3092,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24561:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3098,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3094,
                                            "name": "minimumStakePerToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1279,
                                            "src": "24584:20:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                "typeString": "mapping(contract IERC20 => uint256)"
                                            }
                                        },
                                        "id": 3097,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 3095,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3084,
                                                "src": "24605:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo memory"
                                                }
                                            },
                                            "id": 3096,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "token",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6121,
                                            "src": "24605:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "24584:32:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24561:55:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                "id": 3108,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3100,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24634:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3101,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "token",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6121,
                                                    "src": "24634:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 3105,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "24663:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 3104,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "24655:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 3103,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "24655:7:4",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 3106,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "24655:10:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 3102,
                                                        "name": "IERC20",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 10849,
                                                        "src": "24648:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                            "typeString": "type(contract IERC20)"
                                                        }
                                                    },
                                                    "id": 3107,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "24648:18:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "src": "24634:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 3109,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24668:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 3099,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24626:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3110,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24626:69:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3111,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24626:69:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3116,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3113,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24713:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3114,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "24713:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 3115,
                                                    "name": "minimumStake",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3093,
                                                    "src": "24727:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "24713:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520616d6f756e7420697320746f6f20736d616c6c",
                                                "id": 3117,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24741:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_79d0dd01750da2963fe4113e437f4c554629b10632d88b1b4bfc24ae3a887468",
                                                    "typeString": "literal_string \"stake amount is too small\""
                                                },
                                                "value": "stake amount is too small"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_79d0dd01750da2963fe4113e437f4c554629b10632d88b1b4bfc24ae3a887468",
                                                    "typeString": "literal_string \"stake amount is too small\""
                                                }
                                            ],
                                            "id": 3112,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24705:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3118,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24705:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3119,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24705:64:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3123,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3121,
                                                    "name": "minimumStake",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3093,
                                                    "src": "24787:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3122,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "24803:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "24787:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b696e67207468697320746f6b656e20697320666f7262696464656e",
                                                "id": 3124,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24806:33:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b126e7d5c31250ef323133afe929b8a08df416ba8372063b5ffea5bccedddf89",
                                                    "typeString": "literal_string \"staking this token is forbidden\""
                                                },
                                                "value": "staking this token is forbidden"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b126e7d5c31250ef323133afe929b8a08df416ba8372063b5ffea5bccedddf89",
                                                    "typeString": "literal_string \"staking this token is forbidden\""
                                                }
                                            ],
                                            "id": 3120,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24779:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3125,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24779:61:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3126,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24779:61:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3132,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3128,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24858:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3129,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6112,
                                                    "src": "24858:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3130,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "24879:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 3131,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "minimumUnstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5547,
                                                    "src": "24879:26:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "24858:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b652064656c617920697320746f6f20736d616c6c",
                                                "id": 3133,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24907:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_cc2eb55fb92b51ee24a8c2ae3908b47a7de7fce1b2a076b142f8fa368c25abb9",
                                                    "typeString": "literal_string \"unstake delay is too small\""
                                                },
                                                "value": "unstake delay is too small"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_cc2eb55fb92b51ee24a8c2ae3908b47a7de7fce1b2a076b142f8fa368c25abb9",
                                                    "typeString": "literal_string \"unstake delay is too small\""
                                                }
                                            ],
                                            "id": 3127,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24850:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3134,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24850:86:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3135,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24850:86:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3140,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3137,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24954:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3138,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "24954:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "24975:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "24954:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520686173206265656e2077697468647261776e",
                                                "id": 3141,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24978:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2101ddfdb8cd2a8c797e23955b6f14b3e90bef9bd446ac87a597ea0dc33b52cb",
                                                    "typeString": "literal_string \"stake has been withdrawn\""
                                                },
                                                "value": "stake has been withdrawn"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2101ddfdb8cd2a8c797e23955b6f14b3e90bef9bd446ac87a597ea0dc33b52cb",
                                                    "typeString": "literal_string \"stake has been withdrawn\""
                                                }
                                            ],
                                            "id": 3136,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24946:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3142,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24946:59:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3143,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24946:59:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3145,
                                                "name": "isHubAuthorized",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3086,
                                                "src": "25023:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7468697320687562206973206e6f7420617574686f72697a656420627920534d",
                                                "id": 3146,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25040:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_08cf58529f3a0dc022810dd3041a31940b9bbc91ffb1ec403a1a0249c7eb66da",
                                                    "typeString": "literal_string \"this hub is not authorized by SM\""
                                                },
                                                "value": "this hub is not authorized by SM"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_08cf58529f3a0dc022810dd3041a31940b9bbc91ffb1ec403a1a0249c7eb66da",
                                                    "typeString": "literal_string \"this hub is not authorized by SM\""
                                                }
                                            ],
                                            "id": 3144,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25015:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3147,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25015:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3148,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25015:60:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3074,
                            "nodeType": "StructuredDocumentation",
                            "src": "24333:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "e6e22e12",
                        "id": 3150,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyRelayManagerStaked",
                        "nameLocation": "24372:24:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3078,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "24426:8:4"
                        },
                        "parameters": {
                            "id": 3077,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3076,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "24405:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3150,
                                    "src": "24397:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3075,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "24397:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "24396:22:4"
                        },
                        "returnParameters": {
                            "id": 3079,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "24440:0:4"
                        },
                        "scope": 3330,
                        "src": "24363:719:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5761
                        ],
                        "body": {
                            "id": 3174,
                            "nodeType": "Block",
                            "src": "25192:152:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3162,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "25210:15:4",
                                                "subExpression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 3160,
                                                        "name": "isDeprecated",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3188,
                                                        "src": "25211:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                                            "typeString": "function () view returns (bool)"
                                                        }
                                                    },
                                                    "id": 3161,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "25211:14:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416c72656164792064657072656361746564",
                                                "id": 3163,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25227:20:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_130e3894ae36b716ae912730c41f3f84b0071d54a7c954828529e20ff47f1279",
                                                    "typeString": "literal_string \"Already deprecated\""
                                                },
                                                "value": "Already deprecated"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_130e3894ae36b716ae912730c41f3f84b0071d54a7c954828529e20ff47f1279",
                                                    "typeString": "literal_string \"Already deprecated\""
                                                }
                                            ],
                                            "id": 3159,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25202:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3164,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25202:46:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3165,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25202:46:4"
                                },
                                {
                                    "expression": {
                                        "id": 3168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3166,
                                            "name": "deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1359,
                                            "src": "25258:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3167,
                                            "name": "_deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3153,
                                            "src": "25276:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "25258:34:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3169,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25258:34:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3171,
                                                "name": "deprecationTime",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1359,
                                                "src": "25321:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3170,
                                            "name": "HubDeprecated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5653,
                                            "src": "25307:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 3172,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25307:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3173,
                                    "nodeType": "EmitStatement",
                                    "src": "25302:35:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3151,
                            "nodeType": "StructuredDocumentation",
                            "src": "25088:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "af595dfc",
                        "id": 3175,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3157,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3156,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "25182:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "25182:9:4"
                            }
                        ],
                        "name": "deprecateHub",
                        "nameLocation": "25127:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3155,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25173:8:4"
                        },
                        "parameters": {
                            "id": 3154,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3153,
                                    "mutability": "mutable",
                                    "name": "_deprecationTime",
                                    "nameLocation": "25148:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3175,
                                    "src": "25140:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3152,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25140:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25139:26:4"
                        },
                        "returnParameters": {
                            "id": 3158,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25192:0:4"
                        },
                        "scope": 3330,
                        "src": "25118:226:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5871
                        ],
                        "body": {
                            "id": 3187,
                            "nodeType": "Block",
                            "src": "25440:58:4",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3185,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3182,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "25457:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 3183,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "25457:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "id": 3184,
                                            "name": "deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1359,
                                            "src": "25476:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "25457:34:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3181,
                                    "id": 3186,
                                    "nodeType": "Return",
                                    "src": "25450:41:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3176,
                            "nodeType": "StructuredDocumentation",
                            "src": "25350:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "c7178230",
                        "id": 3188,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isDeprecated",
                        "nameLocation": "25389:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3178,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25411:8:4"
                        },
                        "parameters": {
                            "id": 3177,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25401:2:4"
                        },
                        "returnParameters": {
                            "id": 3181,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3180,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3188,
                                    "src": "25434:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3179,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25434:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25433:6:4"
                        },
                        "scope": 3330,
                        "src": "25380:118:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 3200,
                            "nodeType": "Block",
                            "src": "25620:77:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3195,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3192,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "25638:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3193,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "25638:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 3194,
                                                    "name": "penalizer",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1229,
                                                    "src": "25652:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "25638:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4e6f742070656e616c697a6572",
                                                "id": 3196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25663:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                },
                                                "value": "Not penalizer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                }
                                            ],
                                            "id": 3191,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25630:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3197,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25630:49:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3198,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25630:49:4"
                                },
                                {
                                    "id": 3199,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "25689:1:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3189,
                            "nodeType": "StructuredDocumentation",
                            "src": "25504:85:4",
                            "text": "@notice Prevents any address other than the `Penalizer` from calling this method."
                        },
                        "id": 3201,
                        "name": "penalizerOnly",
                        "nameLocation": "25603:13:4",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3190,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25617:2:4"
                        },
                        "src": "25594:103:4",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5737
                        ],
                        "body": {
                            "id": 3255,
                            "nodeType": "Block",
                            "src": "25833:459:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3213
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3213,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nameLocation": "25851:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3255,
                                            "src": "25843:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 3212,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "25843:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3217,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3214,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1342,
                                            "src": "25866:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 3216,
                                        "indexExpression": {
                                            "id": 3215,
                                            "name": "relayWorker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3204,
                                            "src": "25882:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "25866:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "25843:51:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3224,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3219,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3213,
                                                    "src": "25986:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3222,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "26010:1:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3221,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "26002:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3220,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "26002:7:4",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "26002:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "25986:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 3225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26014:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 3218,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25978:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25978:59:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3227,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25978:59:4"
                                },
                                {
                                    "assignments": [
                                        3232,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3232,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nameLocation": "26079:9:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3255,
                                            "src": "26048:40:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3231,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3230,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "26048:23:4"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "26048:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 3237,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 3235,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3213,
                                                "src": "26119:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3233,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26093:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3234,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6240,
                                            "src": "26093:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory,bool)"
                                            }
                                        },
                                        "id": 3236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26093:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo memory,bool)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "26047:85:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3242,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3239,
                                                        "name": "stakeInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3232,
                                                        "src": "26150:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3240,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "26150:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3241,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "26168:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "26150:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 3243,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26171:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 3238,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "26142:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3244,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26142:56:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3245,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26142:56:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3249,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3213,
                                                "src": "26242:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3250,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3206,
                                                "src": "26256:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3251,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3232,
                                                    "src": "26269:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 3252,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "26269:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3246,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26208:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3248,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalizeRelayManager",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6203,
                                            "src": "26208:33:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256) external"
                                            }
                                        },
                                        "id": 3253,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26208:77:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3254,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26208:77:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3202,
                            "nodeType": "StructuredDocumentation",
                            "src": "25703:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ebcd31ac",
                        "id": 3256,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3210,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3209,
                                    "name": "penalizerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3201,
                                    "src": "25819:13:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "25819:13:4"
                            }
                        ],
                        "name": "penalize",
                        "nameLocation": "25742:8:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3208,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25810:8:4"
                        },
                        "parameters": {
                            "id": 3207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3204,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "25759:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3256,
                                    "src": "25751:19:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3203,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25751:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3206,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "25788:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3256,
                                    "src": "25772:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 3205,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25772:15:4",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25750:50:4"
                        },
                        "returnParameters": {
                            "id": 3211,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25833:0:4"
                        },
                        "scope": 3330,
                        "src": "25733:559:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5865
                        ],
                        "body": {
                            "id": 3270,
                            "nodeType": "Block",
                            "src": "26413:69:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3267,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3259,
                                                "src": "26462:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3265,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26430:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "isRelayEscheatable",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6229,
                                            "src": "26430:31:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                "typeString": "function (address) view external returns (bool)"
                                            }
                                        },
                                        "id": 3268,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26430:45:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3264,
                                    "id": 3269,
                                    "nodeType": "Return",
                                    "src": "26423:52:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3257,
                            "nodeType": "StructuredDocumentation",
                            "src": "26298:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "39622167",
                        "id": 3271,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "26337:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3261,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "26390:8:4"
                        },
                        "parameters": {
                            "id": 3260,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3259,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "26364:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3271,
                                    "src": "26356:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3258,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26356:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26355:22:4"
                        },
                        "returnParameters": {
                            "id": 3264,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3263,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3271,
                                    "src": "26408:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3262,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26408:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26407:6:4"
                        },
                        "scope": 3330,
                        "src": "26328:154:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5767
                        ],
                        "body": {
                            "id": 3317,
                            "nodeType": "Block",
                            "src": "26606:345:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 3283,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3274,
                                                        "src": "26656:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 3281,
                                                        "name": "stakeManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1227,
                                                        "src": "26624:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                            "typeString": "contract IStakeManager"
                                                        }
                                                    },
                                                    "id": 3282,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "isRelayEscheatable",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6229,
                                                    "src": "26624:31:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view external returns (bool)"
                                                    }
                                                },
                                                "id": 3284,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "26624:45:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c617920736572766572206e6f74206573636865617461626c6520796574",
                                                "id": 3285,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26671:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                },
                                                "value": "relay server not escheatable yet"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                }
                                            ],
                                            "id": 3280,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "26616:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3286,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26616:90:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3287,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26616:90:4"
                                },
                                {
                                    "assignments": [
                                        3289
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3289,
                                            "mutability": "mutable",
                                            "name": "balance",
                                            "nameLocation": "26724:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3317,
                                            "src": "26716:15:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3288,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "26716:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3293,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3290,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1350,
                                            "src": "26734:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 3292,
                                        "indexExpression": {
                                            "id": 3291,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3274,
                                            "src": "26743:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "26734:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "26716:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 3298,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 3294,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "26766:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 3296,
                                            "indexExpression": {
                                                "id": 3295,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3274,
                                                "src": "26775:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "26766:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3297,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "26791:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "26766:26:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3299,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26766:26:4"
                                },
                                {
                                    "expression": {
                                        "id": 3310,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 3300,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "26802:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 3303,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 3301,
                                                    "name": "config",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1236,
                                                    "src": "26811:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                        "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                    }
                                                },
                                                "id": 3302,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5549,
                                                "src": "26811:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "26802:27:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3309,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 3304,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "26832:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 3307,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3305,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "26841:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 3306,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devAddress",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5549,
                                                    "src": "26841:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "26832:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 3308,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3289,
                                                "src": "26862:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "26832:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "26802:67:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3311,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26802:67:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3313,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3274,
                                                "src": "26922:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3314,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3289,
                                                "src": "26936:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3312,
                                            "name": "AbandonedRelayManagerBalanceEscheated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5660,
                                            "src": "26884:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 3315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26884:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3316,
                                    "nodeType": "EmitStatement",
                                    "src": "26879:65:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3272,
                            "nodeType": "StructuredDocumentation",
                            "src": "26488:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d26152f9",
                        "id": 3318,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3278,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3277,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "26596:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "26596:9:4"
                            }
                        ],
                        "name": "escheatAbandonedRelayBalance",
                        "nameLocation": "26527:28:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3276,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "26587:8:4"
                        },
                        "parameters": {
                            "id": 3275,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3274,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "26564:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3318,
                                    "src": "26556:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3273,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26556:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26555:22:4"
                        },
                        "returnParameters": {
                            "id": 3279,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "26606:0:4"
                        },
                        "scope": 3330,
                        "src": "26518:433:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5895
                        ],
                        "body": {
                            "id": 3328,
                            "nodeType": "Block",
                            "src": "27061:33:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 3325,
                                            "name": "gasleft",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967289,
                                            "src": "27078:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                "typeString": "function () view returns (uint256)"
                                            }
                                        },
                                        "id": 3326,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "27078:9:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3324,
                                    "id": 3327,
                                    "nodeType": "Return",
                                    "src": "27071:16:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3319,
                            "nodeType": "StructuredDocumentation",
                            "src": "26957:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "45bdade7",
                        "id": 3329,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "26996:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3321,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "27022:8:4"
                        },
                        "parameters": {
                            "id": 3320,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "27012:2:4"
                        },
                        "returnParameters": {
                            "id": 3324,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3323,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3329,
                                    "src": "27053:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3322,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "27053:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "27052:9:4"
                        },
                        "scope": 3330,
                        "src": "26987:107:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    }
                ],
                "scope": 3331,
                "src": "1224:25872:4",
                "usedErrors": []
            }
        ],
        "src": "0:27096:4"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "console": [
                20920
            ]
        },
        "id": 3331,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 1179,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:4"
            },
            {
                "id": 1180,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:4"
            },
            {
                "absolutePath": "hardhat/console.sol",
                "file": "hardhat/console.sol",
                "id": 1181,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 20921,
                "src": "285:29:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol",
                "file": "./utils/MinLibBytes.sol",
                "id": 1182,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8688,
                "src": "316:33:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
                "file": "@openzeppelin/contracts/utils/Address.sol",
                "id": 1183,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 11487,
                "src": "350:51:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 1184,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12147,
                "src": "402:64:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
                "id": 1185,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12341,
                "src": "467:71:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
                "file": "@openzeppelin/contracts/utils/math/Math.sol",
                "id": 1186,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 12857,
                "src": "539:53:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 1187,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 10183,
                "src": "593:52:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "id": 1188,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 10850,
                "src": "646:56:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 1189,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8573,
                "src": "704:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol",
                "file": "./utils/GsnEip712Library.sol",
                "id": 1190,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8465,
                "src": "735:38:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/RelayHubValidator.sol",
                "file": "./utils/RelayHubValidator.sol",
                "id": 1191,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 9500,
                "src": "774:39:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol",
                "file": "./utils/GsnTypes.sol",
                "id": 1192,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 8493,
                "src": "814:30:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 1193,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5897,
                "src": "845:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol",
                "file": "./interfaces/IPaymaster.sol",
                "id": 1194,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5448,
                "src": "882:37:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol",
                "file": "./forwarder/IForwarder.sol",
                "id": 1195,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5130,
                "src": "920:36:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1196,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 6285,
                "src": "957:40:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayRegistrar.sol",
                "file": "./interfaces/IRelayRegistrar.sol",
                "id": 1197,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 5995,
                "src": "998:42:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1198,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 3331,
                "sourceUnit": 6285,
                "src": "1041:40:4",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 1200,
                            "name": "IRelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 5896,
                            "src": "1245:9:4"
                        },
                        "id": 1201,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1245:9:4"
                    },
                    {
                        "baseName": {
                            "id": 1202,
                            "name": "Ownable",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 10182,
                            "src": "1256:7:4"
                        },
                        "id": 1203,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1256:7:4"
                    },
                    {
                        "baseName": {
                            "id": 1204,
                            "name": "ERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12146,
                            "src": "1265:6:4"
                        },
                        "id": 1205,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1265:6:4"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 1199,
                    "nodeType": "StructuredDocumentation",
                    "src": "1083:140:4",
                    "text": " @title The RelayHub Implementation\n @notice This contract implements the `IRelayHub` interface for the EVM-compatible networks."
                },
                "fullyImplemented": true,
                "id": 3330,
                "linearizedBaseContracts": [
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "RelayHub",
                "nameLocation": "1233:8:4",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 1208,
                        "libraryName": {
                            "id": 1206,
                            "name": "ERC165Checker",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12340,
                            "src": "1284:13:4"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1278:32:4",
                        "typeName": {
                            "id": 1207,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1302:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "id": 1211,
                        "libraryName": {
                            "id": 1209,
                            "name": "Address",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 11486,
                            "src": "1321:7:4"
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1315:26:4",
                        "typeName": {
                            "id": 1210,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1333:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        }
                    },
                    {
                        "constant": true,
                        "id": 1214,
                        "mutability": "constant",
                        "name": "DRY_RUN_ADDRESS",
                        "nameLocation": "1372:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1347:85:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1212,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1347:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": {
                            "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030303030",
                            "id": 1213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1390:42:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            },
                            "value": "0x0000000000000000000000000000000000000000"
                        },
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            5889
                        ],
                        "body": {
                            "id": 1223,
                            "nodeType": "Block",
                            "src": "1543:60:4",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e6875622e6972656c6179687562",
                                        "id": 1221,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1560:36:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_2f01acb386ab446760835d5e6820a3c7ca96af0beb7ba86de4b6be4cd0ee1f5a",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.hub.irelayhub\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.hub.irelayhub"
                                    },
                                    "functionReturnParameters": 1220,
                                    "id": 1222,
                                    "nodeType": "Return",
                                    "src": "1553:43:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1215,
                            "nodeType": "StructuredDocumentation",
                            "src": "1439:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d904c732",
                        "id": 1224,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "1478:10:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1217,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1491:8:4"
                        },
                        "parameters": {
                            "id": 1216,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1488:2:4"
                        },
                        "returnParameters": {
                            "id": 1220,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1219,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1224,
                                    "src": "1529:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 1218,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1529:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1528:15:4"
                        },
                        "scope": 3330,
                        "src": "1469:134:4",
                        "stateMutability": "pure",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1227,
                        "mutability": "immutable",
                        "name": "stakeManager",
                        "nameLocation": "1642:12:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1609:45:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                            "typeString": "contract IStakeManager"
                        },
                        "typeName": {
                            "id": 1226,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 1225,
                                "name": "IStakeManager",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 6284,
                                "src": "1609:13:4"
                            },
                            "referencedDeclaration": 6284,
                            "src": "1609:13:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1229,
                        "mutability": "immutable",
                        "name": "penalizer",
                        "nameLocation": "1687:9:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1660:36:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1228,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1660:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1231,
                        "mutability": "immutable",
                        "name": "batchGateway",
                        "nameLocation": "1729:12:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1702:39:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1230,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1702:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1233,
                        "mutability": "immutable",
                        "name": "relayRegistrar",
                        "nameLocation": "1774:14:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1747:41:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1232,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1747:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1236,
                        "mutability": "mutable",
                        "name": "config",
                        "nameLocation": "1819:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "1795:30:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                            "typeString": "struct IRelayHub.RelayHubConfig"
                        },
                        "typeName": {
                            "id": 1235,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 1234,
                                "name": "RelayHubConfig",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 5556,
                                "src": "1795:14:4"
                            },
                            "referencedDeclaration": 5556,
                            "src": "1795:14:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                "typeString": "struct IRelayHub.RelayHubConfig"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5793
                        ],
                        "body": {
                            "id": 1246,
                            "nodeType": "Block",
                            "src": "1943:30:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1244,
                                        "name": "config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1236,
                                        "src": "1960:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 1243,
                                    "id": 1245,
                                    "nodeType": "Return",
                                    "src": "1953:13:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1237,
                            "nodeType": "StructuredDocumentation",
                            "src": "1832:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "6bd50cef",
                        "id": 1247,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getConfiguration",
                        "nameLocation": "1871:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1239,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1897:8:4"
                        },
                        "parameters": {
                            "id": 1238,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1887:2:4"
                        },
                        "returnParameters": {
                            "id": 1243,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1242,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1247,
                                    "src": "1920:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1241,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1240,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "1920:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "1920:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1919:23:4"
                        },
                        "scope": 3330,
                        "src": "1862:111:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5744
                        ],
                        "body": {
                            "id": 1273,
                            "nodeType": "Block",
                            "src": "2092:133:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                "id": 1261,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1258,
                                                        "name": "_config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1251,
                                                        "src": "2110:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                        }
                                                    },
                                                    "id": 1259,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devFee",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5551,
                                                    "src": "2110:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<",
                                                "rightExpression": {
                                                    "hexValue": "313030",
                                                    "id": 1260,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2127:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_100_by_1",
                                                        "typeString": "int_const 100"
                                                    },
                                                    "value": "100"
                                                },
                                                "src": "2110:20:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6465762066656520746f6f2068696768",
                                                "id": 1262,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2132:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_dfd55192e8ce75cdc887b92eb1de30c17a86ec0f1051a64542af244536f106b6",
                                                    "typeString": "literal_string \"dev fee too high\""
                                                },
                                                "value": "dev fee too high"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_dfd55192e8ce75cdc887b92eb1de30c17a86ec0f1051a64542af244536f106b6",
                                                    "typeString": "literal_string \"dev fee too high\""
                                                }
                                            ],
                                            "id": 1257,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2102:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1263,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2102:49:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1264,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2102:49:4"
                                },
                                {
                                    "expression": {
                                        "id": 1267,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1265,
                                            "name": "config",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1236,
                                            "src": "2161:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1266,
                                            "name": "_config",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1251,
                                            "src": "2170:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                "typeString": "struct IRelayHub.RelayHubConfig memory"
                                            }
                                        },
                                        "src": "2161:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                        }
                                    },
                                    "id": 1268,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2161:16:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1270,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "2211:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            ],
                                            "id": 1269,
                                            "name": "RelayHubConfigured",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5562,
                                            "src": "2192:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_struct$_RelayHubConfig_$5556_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IRelayHub.RelayHubConfig memory)"
                                            }
                                        },
                                        "id": 1271,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2192:26:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1272,
                                    "nodeType": "EmitStatement",
                                    "src": "2187:31:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1248,
                            "nodeType": "StructuredDocumentation",
                            "src": "1979:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "9bcde3f3",
                        "id": 1274,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 1255,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 1254,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "2082:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2082:9:4"
                            }
                        ],
                        "name": "setConfiguration",
                        "nameLocation": "2018:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1253,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2073:8:4"
                        },
                        "parameters": {
                            "id": 1252,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1251,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "2057:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1274,
                                    "src": "2035:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1250,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1249,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "2035:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "2035:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2034:31:4"
                        },
                        "returnParameters": {
                            "id": 1256,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2092:0:4"
                        },
                        "scope": 3330,
                        "src": "2009:216:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1279,
                        "mutability": "mutable",
                        "name": "minimumStakePerToken",
                        "nameLocation": "2326:20:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2290:56:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20 => uint256)"
                        },
                        "typeName": {
                            "id": 1278,
                            "keyType": {
                                "id": 1276,
                                "nodeType": "UserDefinedTypeName",
                                "pathNode": {
                                    "id": 1275,
                                    "name": "IERC20",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10849,
                                    "src": "2298:6:4"
                                },
                                "referencedDeclaration": 10849,
                                "src": "2298:6:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                    "typeString": "contract IERC20"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2290:26:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                "typeString": "mapping(contract IERC20 => uint256)"
                            },
                            "valueType": {
                                "id": 1277,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2308:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5755
                        ],
                        "body": {
                            "id": 1337,
                            "nodeType": "Block",
                            "src": "2489:298:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1298,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1294,
                                                        "name": "token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1284,
                                                        "src": "2507:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                            "typeString": "contract IERC20[] memory"
                                                        }
                                                    },
                                                    "id": 1295,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2507:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1296,
                                                        "name": "minimumStake",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1287,
                                                        "src": "2523:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                            "typeString": "uint256[] memory"
                                                        }
                                                    },
                                                    "id": 1297,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2523:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2507:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7365744d696e696d756d5374616b65733a2077726f6e67206c656e677468",
                                                "id": 1299,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2544:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_7035043b10a148d28fdcfdff445e85bde7925a5feaf15781a1ac8dee5cc12f76",
                                                    "typeString": "literal_string \"setMinimumStakes: wrong length\""
                                                },
                                                "value": "setMinimumStakes: wrong length"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_7035043b10a148d28fdcfdff445e85bde7925a5feaf15781a1ac8dee5cc12f76",
                                                    "typeString": "literal_string \"setMinimumStakes: wrong length\""
                                                }
                                            ],
                                            "id": 1293,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "2499:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1300,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2499:78:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1301,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2499:78:4"
                                },
                                {
                                    "body": {
                                        "id": 1335,
                                        "nodeType": "Block",
                                        "src": "2630:151:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 1321,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1313,
                                                            "name": "minimumStakePerToken",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1279,
                                                            "src": "2644:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                                "typeString": "mapping(contract IERC20 => uint256)"
                                                            }
                                                        },
                                                        "id": 1317,
                                                        "indexExpression": {
                                                            "baseExpression": {
                                                                "id": 1314,
                                                                "name": "token",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1284,
                                                                "src": "2665:5:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                                    "typeString": "contract IERC20[] memory"
                                                                }
                                                            },
                                                            "id": 1316,
                                                            "indexExpression": {
                                                                "id": 1315,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1303,
                                                                "src": "2671:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "2665:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                "typeString": "contract IERC20"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "2644:30:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "baseExpression": {
                                                            "id": 1318,
                                                            "name": "minimumStake",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1287,
                                                            "src": "2677:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                "typeString": "uint256[] memory"
                                                            }
                                                        },
                                                        "id": 1320,
                                                        "indexExpression": {
                                                            "id": 1319,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1303,
                                                            "src": "2690:1:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "2677:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "2644:48:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1322,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2644:48:4"
                                            },
                                            {
                                                "eventCall": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "baseExpression": {
                                                                        "id": 1326,
                                                                        "name": "token",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1284,
                                                                        "src": "2743:5:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                                            "typeString": "contract IERC20[] memory"
                                                                        }
                                                                    },
                                                                    "id": 1328,
                                                                    "indexExpression": {
                                                                        "id": 1327,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1303,
                                                                        "src": "2749:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "2743:8:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                        "typeString": "contract IERC20"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                                        "typeString": "contract IERC20"
                                                                    }
                                                                ],
                                                                "id": 1325,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2735:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 1324,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2735:7:4",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 1329,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2735:17:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1330,
                                                                "name": "minimumStake",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1287,
                                                                "src": "2754:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1332,
                                                            "indexExpression": {
                                                                "id": 1331,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1303,
                                                                "src": "2767:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "2754:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 1323,
                                                        "name": "StakingTokenDataChanged",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5597,
                                                        "src": "2711:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (address,uint256)"
                                                        }
                                                    },
                                                    "id": 1333,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2711:59:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1334,
                                                "nodeType": "EmitStatement",
                                                "src": "2706:64:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1309,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1306,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1303,
                                            "src": "2607:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1307,
                                                "name": "token",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1284,
                                                "src": "2611:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                                    "typeString": "contract IERC20[] memory"
                                                }
                                            },
                                            "id": 1308,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "2611:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2607:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1336,
                                    "initializationExpression": {
                                        "assignments": [
                                            1303
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1303,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "2600:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1336,
                                                "src": "2592:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1302,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2592:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1305,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1304,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2604:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "2592:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1311,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "2625:3:4",
                                            "subExpression": {
                                                "id": 1310,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1303,
                                                "src": "2625:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1312,
                                        "nodeType": "ExpressionStatement",
                                        "src": "2625:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "2587:194:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1280,
                            "nodeType": "StructuredDocumentation",
                            "src": "2353:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8a09fb56",
                        "id": 1338,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 1291,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 1290,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "2479:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2479:9:4"
                            }
                        ],
                        "name": "setMinimumStakes",
                        "nameLocation": "2392:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1289,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2470:8:4"
                        },
                        "parameters": {
                            "id": 1288,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1284,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "2425:5:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1338,
                                    "src": "2409:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_memory_ptr",
                                        "typeString": "contract IERC20[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1282,
                                            "nodeType": "UserDefinedTypeName",
                                            "pathNode": {
                                                "id": 1281,
                                                "name": "IERC20",
                                                "nodeType": "IdentifierPath",
                                                "referencedDeclaration": 10849,
                                                "src": "2409:6:4"
                                            },
                                            "referencedDeclaration": 10849,
                                            "src": "2409:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "id": 1283,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2409:8:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_contract$_IERC20_$10849_$dyn_storage_ptr",
                                            "typeString": "contract IERC20[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1287,
                                    "mutability": "mutable",
                                    "name": "minimumStake",
                                    "nameLocation": "2449:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1338,
                                    "src": "2432:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1285,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2432:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1286,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2432:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2408:54:4"
                        },
                        "returnParameters": {
                            "id": 1292,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2489:0:4"
                        },
                        "scope": 3330,
                        "src": "2383:404:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 1342,
                        "mutability": "mutable",
                        "name": "workerToManager",
                        "nameLocation": "2890:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2853:52:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                        },
                        "typeName": {
                            "id": 1341,
                            "keyType": {
                                "id": 1339,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2861:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2853:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                                "id": 1340,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2872:7:4",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1346,
                        "mutability": "mutable",
                        "name": "workerCount",
                        "nameLocation": "3007:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "2970:48:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 1345,
                            "keyType": {
                                "id": 1343,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2978:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "2970:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 1344,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2989:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1350,
                        "mutability": "mutable",
                        "name": "balances",
                        "nameLocation": "3062:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3025:45:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 1349,
                            "keyType": {
                                "id": 1347,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3033:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "3025:27:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 1348,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3044:7:4",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1352,
                        "mutability": "immutable",
                        "name": "creationBlock",
                        "nameLocation": "3104:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3077:40:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1351,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3077:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1359,
                        "mutability": "mutable",
                        "name": "deprecationTime",
                        "nameLocation": "3140:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 3330,
                        "src": "3123:52:4",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1353,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3123:7:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": {
                            "expression": {
                                "arguments": [
                                    {
                                        "id": 1356,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "3163:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                        },
                                        "typeName": {
                                            "id": 1355,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "3163:7:4",
                                            "typeDescriptions": {}
                                        }
                                    }
                                ],
                                "expression": {
                                    "argumentTypes": [
                                        {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                        }
                                    ],
                                    "id": 1354,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967269,
                                    "src": "3158:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                    }
                                },
                                "id": 1357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3158:13:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                }
                            },
                            "id": 1358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3158:17:4",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1399,
                            "nodeType": "Block",
                            "src": "3369:230:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1377,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1374,
                                            "name": "creationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1352,
                                            "src": "3379:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "expression": {
                                                "id": 1375,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "3395:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 1376,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "number",
                                            "nodeType": "MemberAccess",
                                            "src": "3395:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3379:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1378,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3379:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1381,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1379,
                                            "name": "stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1227,
                                            "src": "3417:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1380,
                                            "name": "_stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1362,
                                            "src": "3432:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "src": "3417:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "id": 1382,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3417:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1385,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1383,
                                            "name": "penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1229,
                                            "src": "3455:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1384,
                                            "name": "_penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1364,
                                            "src": "3467:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3455:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1386,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3455:22:4"
                                },
                                {
                                    "expression": {
                                        "id": 1389,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1387,
                                            "name": "batchGateway",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1231,
                                            "src": "3487:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1388,
                                            "name": "_batchGateway",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1366,
                                            "src": "3502:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3487:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1390,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3487:28:4"
                                },
                                {
                                    "expression": {
                                        "id": 1393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1391,
                                            "name": "relayRegistrar",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1233,
                                            "src": "3525:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1392,
                                            "name": "_relayRegistrar",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1368,
                                            "src": "3542:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "3525:32:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1394,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3525:32:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1396,
                                                "name": "_config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1371,
                                                "src": "3584:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                    "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                                    "typeString": "struct IRelayHub.RelayHubConfig memory"
                                                }
                                            ],
                                            "id": 1395,
                                            "name": "setConfiguration",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1274,
                                            "src": "3567:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RelayHubConfig_$5556_memory_ptr_$returns$__$",
                                                "typeString": "function (struct IRelayHub.RelayHubConfig memory)"
                                            }
                                        },
                                        "id": 1397,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3567:25:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1398,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3567:25:4"
                                }
                            ]
                        },
                        "id": 1400,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1372,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1362,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "3218:13:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3204:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 1361,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1360,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "3204:13:4"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "3204:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1364,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "3249:10:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3241:18:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1363,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3241:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1366,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "3277:13:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3269:21:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1365,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3269:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1368,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "3308:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3300:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1367,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3300:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1371,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "3355:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1400,
                                    "src": "3333:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 1370,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1369,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "3333:14:4"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "3333:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3194:174:4"
                        },
                        "returnParameters": {
                            "id": 1373,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3369:0:4"
                        },
                        "scope": 3330,
                        "src": "3182:417:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5883
                        ],
                        "body": {
                            "id": 1409,
                            "nodeType": "Block",
                            "src": "3711:37:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1407,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1352,
                                        "src": "3728:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1406,
                                    "id": 1408,
                                    "nodeType": "Return",
                                    "src": "3721:20:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1401,
                            "nodeType": "StructuredDocumentation",
                            "src": "3605:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "20ffd56d",
                        "id": 1410,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "3644:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1403,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3672:8:4"
                        },
                        "parameters": {
                            "id": 1402,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3660:2:4"
                        },
                        "returnParameters": {
                            "id": 1406,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1405,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1410,
                                    "src": "3703:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1404,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3703:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3702:9:4"
                        },
                        "scope": 3330,
                        "src": "3635:113:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5877
                        ],
                        "body": {
                            "id": 1419,
                            "nodeType": "Block",
                            "src": "3855:39:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1417,
                                        "name": "deprecationTime",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1359,
                                        "src": "3872:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1416,
                                    "id": 1418,
                                    "nodeType": "Return",
                                    "src": "3865:22:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1411,
                            "nodeType": "StructuredDocumentation",
                            "src": "3754:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "3c16e59a",
                        "id": 1420,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getDeprecationTime",
                        "nameLocation": "3793:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1413,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3823:8:4"
                        },
                        "parameters": {
                            "id": 1412,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3811:2:4"
                        },
                        "returnParameters": {
                            "id": 1416,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1415,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1420,
                                    "src": "3846:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1414,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3846:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3845:9:4"
                        },
                        "scope": 3330,
                        "src": "3784:110:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5833
                        ],
                        "body": {
                            "id": 1430,
                            "nodeType": "Block",
                            "src": "4004:36:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1428,
                                        "name": "stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1227,
                                        "src": "4021:12:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "functionReturnParameters": 1427,
                                    "id": 1429,
                                    "nodeType": "Return",
                                    "src": "4014:19:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1421,
                            "nodeType": "StructuredDocumentation",
                            "src": "3900:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ca64f9e7",
                        "id": 1431,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeManager",
                        "nameLocation": "3939:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1423,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3966:8:4"
                        },
                        "parameters": {
                            "id": 1422,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3954:2:4"
                        },
                        "returnParameters": {
                            "id": 1427,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1426,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1431,
                                    "src": "3989:13:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 1425,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1424,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "3989:13:4"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "3989:13:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3988:15:4"
                        },
                        "scope": 3330,
                        "src": "3930:110:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5839
                        ],
                        "body": {
                            "id": 1440,
                            "nodeType": "Block",
                            "src": "4141:33:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1438,
                                        "name": "penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1229,
                                        "src": "4158:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1437,
                                    "id": 1439,
                                    "nodeType": "Return",
                                    "src": "4151:16:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1432,
                            "nodeType": "StructuredDocumentation",
                            "src": "4046:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "75dc7b4e",
                        "id": 1441,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getPenalizer",
                        "nameLocation": "4085:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1434,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4109:8:4"
                        },
                        "parameters": {
                            "id": 1433,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4097:2:4"
                        },
                        "returnParameters": {
                            "id": 1437,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1436,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1441,
                                    "src": "4132:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1435,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4132:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4131:9:4"
                        },
                        "scope": 3330,
                        "src": "4076:98:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5851
                        ],
                        "body": {
                            "id": 1450,
                            "nodeType": "Block",
                            "src": "4278:36:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1448,
                                        "name": "batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1231,
                                        "src": "4295:12:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1447,
                                    "id": 1449,
                                    "nodeType": "Return",
                                    "src": "4288:19:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1442,
                            "nodeType": "StructuredDocumentation",
                            "src": "4180:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "f7908a74",
                        "id": 1451,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBatchGateway",
                        "nameLocation": "4219:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1444,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4246:8:4"
                        },
                        "parameters": {
                            "id": 1443,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4234:2:4"
                        },
                        "returnParameters": {
                            "id": 1447,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1446,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1451,
                                    "src": "4269:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1445,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4269:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4268:9:4"
                        },
                        "scope": 3330,
                        "src": "4210:104:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5845
                        ],
                        "body": {
                            "id": 1460,
                            "nodeType": "Block",
                            "src": "4420:38:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1458,
                                        "name": "relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1233,
                                        "src": "4437:14:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1457,
                                    "id": 1459,
                                    "nodeType": "Return",
                                    "src": "4430:21:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1452,
                            "nodeType": "StructuredDocumentation",
                            "src": "4320:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "51d85156",
                        "id": 1461,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getRelayRegistrar",
                        "nameLocation": "4359:17:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1454,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4388:8:4"
                        },
                        "parameters": {
                            "id": 1453,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4376:2:4"
                        },
                        "returnParameters": {
                            "id": 1457,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1456,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1461,
                                    "src": "4411:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1455,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4411:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4410:9:4"
                        },
                        "scope": 3330,
                        "src": "4350:108:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5802
                        ],
                        "body": {
                            "id": 1475,
                            "nodeType": "Block",
                            "src": "4582:51:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1471,
                                            "name": "minimumStakePerToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1279,
                                            "src": "4599:20:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                "typeString": "mapping(contract IERC20 => uint256)"
                                            }
                                        },
                                        "id": 1473,
                                        "indexExpression": {
                                            "id": 1472,
                                            "name": "token",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1465,
                                            "src": "4620:5:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4599:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1470,
                                    "id": 1474,
                                    "nodeType": "Return",
                                    "src": "4592:34:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1462,
                            "nodeType": "StructuredDocumentation",
                            "src": "4464:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ddf73789",
                        "id": 1476,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMinimumStakePerToken",
                        "nameLocation": "4503:23:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1467,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4550:8:4"
                        },
                        "parameters": {
                            "id": 1466,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1465,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "4534:5:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1476,
                                    "src": "4527:12:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 1464,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1463,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "4527:6:4"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "4527:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4526:14:4"
                        },
                        "returnParameters": {
                            "id": 1470,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1469,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1476,
                                    "src": "4573:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1468,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4573:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4572:9:4"
                        },
                        "scope": 3330,
                        "src": "4494:139:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5810
                        ],
                        "body": {
                            "id": 1489,
                            "nodeType": "Block",
                            "src": "4752:47:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1485,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1342,
                                            "src": "4769:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 1487,
                                        "indexExpression": {
                                            "id": 1486,
                                            "name": "worker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1479,
                                            "src": "4785:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4769:23:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 1484,
                                    "id": 1488,
                                    "nodeType": "Return",
                                    "src": "4762:30:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1477,
                            "nodeType": "StructuredDocumentation",
                            "src": "4639:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "be7c76ad",
                        "id": 1490,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerManager",
                        "nameLocation": "4678:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1481,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4720:8:4"
                        },
                        "parameters": {
                            "id": 1480,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1479,
                                    "mutability": "mutable",
                                    "name": "worker",
                                    "nameLocation": "4703:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1490,
                                    "src": "4695:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1478,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4695:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4694:16:4"
                        },
                        "returnParameters": {
                            "id": 1484,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1483,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1490,
                                    "src": "4743:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1482,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4743:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4742:9:4"
                        },
                        "scope": 3330,
                        "src": "4669:130:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5818
                        ],
                        "body": {
                            "id": 1503,
                            "nodeType": "Block",
                            "src": "4917:44:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1499,
                                            "name": "workerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1346,
                                            "src": "4934:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 1501,
                                        "indexExpression": {
                                            "id": 1500,
                                            "name": "manager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1493,
                                            "src": "4946:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4934:20:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1498,
                                    "id": 1502,
                                    "nodeType": "Return",
                                    "src": "4927:27:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1491,
                            "nodeType": "StructuredDocumentation",
                            "src": "4805:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "59c4afc0",
                        "id": 1504,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getWorkerCount",
                        "nameLocation": "4844:14:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1495,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4885:8:4"
                        },
                        "parameters": {
                            "id": 1494,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1493,
                                    "mutability": "mutable",
                                    "name": "manager",
                                    "nameLocation": "4867:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1504,
                                    "src": "4859:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1492,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4859:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4858:17:4"
                        },
                        "returnParameters": {
                            "id": 1498,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1497,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1504,
                                    "src": "4908:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1496,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4908:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4907:9:4"
                        },
                        "scope": 3330,
                        "src": "4835:126:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            12145,
                            12351
                        ],
                        "body": {
                            "id": 1534,
                            "nodeType": "Block",
                            "src": "5103:174:4",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 1532,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 1527,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                "id": 1520,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1515,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5120:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 1517,
                                                                "name": "IRelayHub",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5896,
                                                                "src": "5140:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$5896_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_IRelayHub_$5896_$",
                                                                    "typeString": "type(contract IRelayHub)"
                                                                }
                                                            ],
                                                            "id": 1516,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "5135:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 1518,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5135:15:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_IRelayHub_$5896",
                                                            "typeString": "type(contract IRelayHub)"
                                                        }
                                                    },
                                                    "id": 1519,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5135:27:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "src": "5120:42:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "||",
                                            "rightExpression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                },
                                                "id": 1526,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1521,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5178:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "id": 1523,
                                                                "name": "Ownable",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 10182,
                                                                "src": "5198:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_Ownable_$10182_$",
                                                                    "typeString": "type(contract Ownable)"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_type$_t_contract$_Ownable_$10182_$",
                                                                    "typeString": "type(contract Ownable)"
                                                                }
                                                            ],
                                                            "id": 1522,
                                                            "name": "type",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967269,
                                                            "src": "5193:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                "typeString": "function () pure"
                                                            }
                                                        },
                                                        "id": 1524,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5193:13:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_meta_type_t_contract$_Ownable_$10182",
                                                            "typeString": "type(contract Ownable)"
                                                        }
                                                    },
                                                    "id": 1525,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "interfaceId",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5193:25:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                "src": "5178:40:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "5120:98:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "||",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "id": 1530,
                                                    "name": "interfaceId",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1507,
                                                    "src": "5258:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 1528,
                                                    "name": "super",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967271,
                                                    "src": "5234:5:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_super$_RelayHub_$3330_$",
                                                        "typeString": "type(contract super RelayHub)"
                                                    }
                                                },
                                                "id": 1529,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "supportsInterface",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 12145,
                                                "src": "5234:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                                    "typeString": "function (bytes4) view returns (bool)"
                                                }
                                            },
                                            "id": 1531,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5234:36:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "5120:150:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 1514,
                                    "id": 1533,
                                    "nodeType": "Return",
                                    "src": "5113:157:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1505,
                            "nodeType": "StructuredDocumentation",
                            "src": "4967:23:4",
                            "text": "@inheritdoc IERC165"
                        },
                        "functionSelector": "01ffc9a7",
                        "id": 1535,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "supportsInterface",
                        "nameLocation": "5004:17:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1511,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [
                                {
                                    "id": 1509,
                                    "name": "IERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12352,
                                    "src": "5071:7:4"
                                },
                                {
                                    "id": 1510,
                                    "name": "ERC165",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 12146,
                                    "src": "5080:6:4"
                                }
                            ],
                            "src": "5062:25:4"
                        },
                        "parameters": {
                            "id": 1508,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1507,
                                    "mutability": "mutable",
                                    "name": "interfaceId",
                                    "nameLocation": "5029:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1535,
                                    "src": "5022:18:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    },
                                    "typeName": {
                                        "id": 1506,
                                        "name": "bytes4",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5022:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5021:20:4"
                        },
                        "returnParameters": {
                            "id": 1514,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1513,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1535,
                                    "src": "5097:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1512,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5097:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5096:6:4"
                        },
                        "scope": 3330,
                        "src": "4995:282:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5681
                        ],
                        "body": {
                            "id": 1569,
                            "nodeType": "Block",
                            "src": "5386:264:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1546,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1543,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "5404:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1544,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5404:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 1545,
                                                    "name": "relayRegistrar",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1233,
                                                    "src": "5418:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "5404:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "63616c6c6572206973206e6f742072656c617920726567697374726172",
                                                "id": 1547,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5434:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_12c17dc2880250c8beea9a54d0d6b8585176a1d283173f6a6597811ab427f4a0",
                                                    "typeString": "literal_string \"caller is not relay registrar\""
                                                },
                                                "value": "caller is not relay registrar"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_12c17dc2880250c8beea9a54d0d6b8585176a1d283173f6a6597811ab427f4a0",
                                                    "typeString": "literal_string \"caller is not relay registrar\""
                                                }
                                            ],
                                            "id": 1542,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5396:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1548,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5396:70:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1549,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5396:70:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1551,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1538,
                                                "src": "5501:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1550,
                                            "name": "verifyRelayManagerStaked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3150,
                                            "src": "5476:24:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                "typeString": "function (address) view"
                                            }
                                        },
                                        "id": 1552,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5476:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1553,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5476:38:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1559,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "baseExpression": {
                                                        "id": 1555,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1346,
                                                        "src": "5532:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1557,
                                                    "indexExpression": {
                                                        "id": 1556,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1538,
                                                        "src": "5544:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5532:25:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 1558,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5560:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5532:29:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6e6f2072656c617920776f726b657273",
                                                "id": 1560,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5563:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                },
                                                "value": "no relay workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                }
                                            ],
                                            "id": 1554,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5524:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1561,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5524:58:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1562,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5524:58:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1566,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1538,
                                                "src": "5630:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 1563,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "5592:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1565,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "updateRelayKeepaliveTime",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6221,
                                            "src": "5592:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                                                "typeString": "function (address) external"
                                            }
                                        },
                                        "id": 1567,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5592:51:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1568,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5592:51:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1536,
                            "nodeType": "StructuredDocumentation",
                            "src": "5283:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "4f7de031",
                        "id": 1570,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "onRelayServerRegistered",
                        "nameLocation": "5322:23:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1540,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5377:8:4"
                        },
                        "parameters": {
                            "id": 1539,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1538,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5354:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1570,
                                    "src": "5346:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1537,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5346:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5345:22:4"
                        },
                        "returnParameters": {
                            "id": 1541,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5386:0:4"
                        },
                        "scope": 3330,
                        "src": "5313:337:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5675
                        ],
                        "body": {
                            "id": 1651,
                            "nodeType": "Block",
                            "src": "5765:633:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1579
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1579,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nameLocation": "5783:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1651,
                                            "src": "5775:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 1578,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5775:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1582,
                                    "initialValue": {
                                        "expression": {
                                            "id": 1580,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "5798:3:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 1581,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "5798:10:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5775:33:4"
                                },
                                {
                                    "assignments": [
                                        1584
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1584,
                                            "mutability": "mutable",
                                            "name": "newWorkerCount",
                                            "nameLocation": "5826:14:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1651,
                                            "src": "5818:22:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1583,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5818:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1591,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "baseExpression": {
                                                "id": 1585,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1346,
                                                "src": "5843:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1587,
                                            "indexExpression": {
                                                "id": 1586,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "5855:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5843:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1588,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "5871:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 1589,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "5871:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5843:50:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5818:75:4"
                                },
                                {
                                    "expression": {
                                        "id": 1596,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1592,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1346,
                                                "src": "5903:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1594,
                                            "indexExpression": {
                                                "id": 1593,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "5915:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "5903:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1595,
                                            "name": "newWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1584,
                                            "src": "5931:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5903:42:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1597,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5903:42:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1602,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1599,
                                                    "name": "newWorkerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1584,
                                                    "src": "5963:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1600,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "5981:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 1601,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "maxWorkerCount",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5539,
                                                    "src": "5981:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5963:39:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746f6f206d616e7920776f726b657273",
                                                "id": 1603,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6004:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                },
                                                "value": "too many workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                }
                                            ],
                                            "id": 1598,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "5955:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1604,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5955:68:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1605,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5955:68:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1607,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "6059:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1606,
                                            "name": "verifyRelayManagerStaked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3150,
                                            "src": "6034:24:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                "typeString": "function (address) view"
                                            }
                                        },
                                        "id": 1608,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6034:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1609,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6034:38:4"
                                },
                                {
                                    "body": {
                                        "id": 1643,
                                        "nodeType": "Block",
                                        "src": "6136:176:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 1631,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "baseExpression": {
                                                                    "id": 1622,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1342,
                                                                    "src": "6158:15:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 1626,
                                                                "indexExpression": {
                                                                    "baseExpression": {
                                                                        "id": 1623,
                                                                        "name": "newRelayWorkers",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1574,
                                                                        "src": "6174:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                            "typeString": "address[] calldata"
                                                                        }
                                                                    },
                                                                    "id": 1625,
                                                                    "indexExpression": {
                                                                        "id": 1624,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1611,
                                                                        "src": "6190:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "6174:18:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "6158:35:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 1629,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "6205:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 1628,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "6197:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1627,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "6197:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 1630,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "6197:10:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "6158:49:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "7468697320776f726b6572206861732061206d616e61676572",
                                                            "id": 1632,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6209:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            },
                                                            "value": "this worker has a manager"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            }
                                                        ],
                                                        "id": 1621,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "6150:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1633,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6150:87:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1634,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6150:87:4"
                                            },
                                            {
                                                "expression": {
                                                    "id": 1641,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1635,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1342,
                                                            "src": "6251:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1639,
                                                        "indexExpression": {
                                                            "baseExpression": {
                                                                "id": 1636,
                                                                "name": "newRelayWorkers",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1574,
                                                                "src": "6267:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                    "typeString": "address[] calldata"
                                                                }
                                                            },
                                                            "id": 1638,
                                                            "indexExpression": {
                                                                "id": 1637,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1611,
                                                                "src": "6283:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "6267:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6251:35:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "id": 1640,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1579,
                                                        "src": "6289:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "6251:50:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 1642,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6251:50:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1617,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1614,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1611,
                                            "src": "6103:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1615,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "6107:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 1616,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "6107:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6103:26:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1644,
                                    "initializationExpression": {
                                        "assignments": [
                                            1611
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1611,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "6096:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1644,
                                                "src": "6088:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1610,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6088:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1613,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1612,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6100:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "6088:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1619,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "6131:3:4",
                                            "subExpression": {
                                                "id": 1618,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1611,
                                                "src": "6131:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1620,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6131:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "6083:229:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1646,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1579,
                                                "src": "6345:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 1647,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1574,
                                                "src": "6359:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            {
                                                "id": 1648,
                                                "name": "newWorkerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1584,
                                                "src": "6376:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1645,
                                            "name": "RelayWorkersAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5572,
                                            "src": "6327:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address[] memory,uint256)"
                                            }
                                        },
                                        "id": 1649,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6327:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1650,
                                    "nodeType": "EmitStatement",
                                    "src": "6322:69:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1571,
                            "nodeType": "StructuredDocumentation",
                            "src": "5656:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "c2da0786",
                        "id": 1652,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nameLocation": "5695:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1576,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5756:8:4"
                        },
                        "parameters": {
                            "id": 1575,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1574,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nameLocation": "5730:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1652,
                                    "src": "5711:34:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1572,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5711:7:4",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 1573,
                                        "nodeType": "ArrayTypeName",
                                        "src": "5711:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5710:36:4"
                        },
                        "returnParameters": {
                            "id": 1577,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5765:0:4"
                        },
                        "scope": 3330,
                        "src": "5686:712:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5687
                        ],
                        "body": {
                            "id": 1692,
                            "nodeType": "Block",
                            "src": "6502:260:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "id": 1663,
                                                                    "name": "IPaymaster",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5447,
                                                                    "src": "6550:10:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                        "typeString": "type(contract IPaymaster)"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                        "typeString": "type(contract IPaymaster)"
                                                                    }
                                                                ],
                                                                "id": 1662,
                                                                "name": "type",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 4294967269,
                                                                "src": "6545:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                    "typeString": "function () pure"
                                                                }
                                                            },
                                                            "id": 1664,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6545:16:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_meta_type_t_contract$_IPaymaster_$5447",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1665,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "interfaceId",
                                                        "nodeType": "MemberAccess",
                                                        "src": "6545:28:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1660,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1655,
                                                        "src": "6520:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "id": 1661,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "supportsInterface",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12196,
                                                    "src": "6520:24:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$bound_to$_t_address_$",
                                                        "typeString": "function (address,bytes4) view returns (bool)"
                                                    }
                                                },
                                                "id": 1666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6520:54:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "746172676574206973206e6f7420612076616c696420495061796d6173746572",
                                                "id": 1667,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6576:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_07905ca7d5fe750a75ea356d719c634bb8b03c9bc777ae573c075e017444f22a",
                                                    "typeString": "literal_string \"target is not a valid IPaymaster\""
                                                },
                                                "value": "target is not a valid IPaymaster"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_07905ca7d5fe750a75ea356d719c634bb8b03c9bc777ae573c075e017444f22a",
                                                    "typeString": "literal_string \"target is not a valid IPaymaster\""
                                                }
                                            ],
                                            "id": 1659,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "6512:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1668,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6512:99:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1669,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6512:99:4"
                                },
                                {
                                    "assignments": [
                                        1671
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1671,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nameLocation": "6629:6:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1692,
                                            "src": "6621:14:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1670,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6621:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1674,
                                    "initialValue": {
                                        "expression": {
                                            "id": 1672,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "6638:3:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 1673,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "src": "6638:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6621:26:4"
                                },
                                {
                                    "expression": {
                                        "id": 1683,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1675,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "6658:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1677,
                                            "indexExpression": {
                                                "id": 1676,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1655,
                                                "src": "6667:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "6658:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 1682,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 1678,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "6677:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 1680,
                                                "indexExpression": {
                                                    "id": 1679,
                                                    "name": "target",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1655,
                                                    "src": "6686:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6677:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 1681,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1671,
                                                "src": "6696:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "6677:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6658:44:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1684,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6658:44:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1686,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1655,
                                                "src": "6728:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 1687,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "6736:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1688,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "6736:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 1689,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1671,
                                                "src": "6748:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1685,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5590,
                                            "src": "6718:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 1690,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6718:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1691,
                                    "nodeType": "EmitStatement",
                                    "src": "6713:42:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1653,
                            "nodeType": "StructuredDocumentation",
                            "src": "6404:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "aa67c919",
                        "id": 1693,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nameLocation": "6443:10:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1657,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6485:8:4"
                        },
                        "parameters": {
                            "id": 1656,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1655,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "6462:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1693,
                                    "src": "6454:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1654,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6454:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6453:16:4"
                        },
                        "returnParameters": {
                            "id": 1658,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6502:0:4"
                        },
                        "scope": 3330,
                        "src": "6434:328:4",
                        "stateMutability": "payable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5826
                        ],
                        "body": {
                            "id": 1706,
                            "nodeType": "Block",
                            "src": "6874:40:4",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 1702,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1350,
                                            "src": "6891:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 1704,
                                        "indexExpression": {
                                            "id": 1703,
                                            "name": "target",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1696,
                                            "src": "6900:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6891:16:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1701,
                                    "id": 1705,
                                    "nodeType": "Return",
                                    "src": "6884:23:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1694,
                            "nodeType": "StructuredDocumentation",
                            "src": "6768:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "70a08231",
                        "id": 1707,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nameLocation": "6807:9:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1698,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6842:8:4"
                        },
                        "parameters": {
                            "id": 1697,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1696,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nameLocation": "6825:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1707,
                                    "src": "6817:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1695,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6817:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6816:16:4"
                        },
                        "returnParameters": {
                            "id": 1701,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1700,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1707,
                                    "src": "6865:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1699,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6865:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6864:9:4"
                        },
                        "scope": 3330,
                        "src": "6798:116:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5695
                        ],
                        "body": {
                            "id": 1753,
                            "nodeType": "Block",
                            "src": "7022:244:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1720
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1720,
                                            "mutability": "mutable",
                                            "name": "amounts",
                                            "nameLocation": "7049:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1753,
                                            "src": "7032:24:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                "typeString": "uint256[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1718,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7032:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1719,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7032:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                                    "typeString": "uint256[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1726,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "31",
                                                "id": 1724,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7073:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                }
                                            ],
                                            "id": 1723,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "7059:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (uint256[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1721,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7063:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1722,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7063:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                                    "typeString": "uint256[]"
                                                }
                                            }
                                        },
                                        "id": 1725,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7059:16:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7032:43:4"
                                },
                                {
                                    "assignments": [
                                        1729
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1729,
                                            "mutability": "mutable",
                                            "name": "destinations",
                                            "nameLocation": "7110:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1753,
                                            "src": "7085:37:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                "typeString": "address payable[]"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1727,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7085:15:4",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 1728,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7085:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                                    "typeString": "address payable[]"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1735,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "hexValue": "31",
                                                "id": 1733,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7147:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                }
                                            ],
                                            "id": 1732,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "NewExpression",
                                            "src": "7125:21:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_payable_$dyn_memory_ptr_$",
                                                "typeString": "function (uint256) pure returns (address payable[] memory)"
                                            },
                                            "typeName": {
                                                "baseType": {
                                                    "id": 1730,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7129:15:4",
                                                    "stateMutability": "payable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "id": 1731,
                                                "nodeType": "ArrayTypeName",
                                                "src": "7129:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                                    "typeString": "address payable[]"
                                                }
                                            }
                                        },
                                        "id": 1734,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7125:24:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                            "typeString": "address payable[] memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7085:64:4"
                                },
                                {
                                    "expression": {
                                        "id": 1740,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1736,
                                                "name": "amounts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1720,
                                                "src": "7159:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            },
                                            "id": 1738,
                                            "indexExpression": {
                                                "hexValue": "30",
                                                "id": 1737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7167:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7159:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1739,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1712,
                                            "src": "7172:6:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7159:19:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1741,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7159:19:4"
                                },
                                {
                                    "expression": {
                                        "id": 1746,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 1742,
                                                "name": "destinations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1729,
                                                "src": "7188:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                }
                                            },
                                            "id": 1744,
                                            "indexExpression": {
                                                "hexValue": "30",
                                                "id": 1743,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7201:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7188:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1745,
                                            "name": "dest",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1710,
                                            "src": "7206:4:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "src": "7188:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "id": 1747,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7188:22:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1749,
                                                "name": "destinations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1729,
                                                "src": "7237:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                }
                                            },
                                            {
                                                "id": 1750,
                                                "name": "amounts",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1720,
                                                "src": "7251:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                    "typeString": "address payable[] memory"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            ],
                                            "id": 1748,
                                            "name": "withdrawMultiple",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1855,
                                            "src": "7220:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_payable_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                                "typeString": "function (address payable[] memory,uint256[] memory)"
                                            }
                                        },
                                        "id": 1751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7220:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1752,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7220:39:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1708,
                            "nodeType": "StructuredDocumentation",
                            "src": "6920:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "f3fef3a3",
                        "id": 1754,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nameLocation": "6959:8:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1714,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7013:8:4"
                        },
                        "parameters": {
                            "id": 1713,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1710,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "6984:4:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1754,
                                    "src": "6968:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 1709,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6968:15:4",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1712,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "6998:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1754,
                                    "src": "6990:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1711,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6990:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6967:38:4"
                        },
                        "returnParameters": {
                            "id": 1715,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7022:0:4"
                        },
                        "scope": 3330,
                        "src": "6950:316:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5705
                        ],
                        "body": {
                            "id": 1854,
                            "nodeType": "Block",
                            "src": "7400:560:4",
                            "statements": [
                                {
                                    "assignments": [
                                        1766
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1766,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "nameLocation": "7426:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1854,
                                            "src": "7410:23:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            },
                                            "typeName": {
                                                "id": 1765,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7410:15:4",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1772,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 1769,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "7444:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1770,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "7444:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1768,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "7436:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_payable_$",
                                                "typeString": "type(address payable)"
                                            },
                                            "typeName": {
                                                "id": 1767,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7436:8:4",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 1771,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7436:19:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7410:45:4"
                                },
                                {
                                    "body": {
                                        "id": 1852,
                                        "nodeType": "Block",
                                        "src": "7509:445:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "77697468647261774d756c7469706c65202573202573202573",
                                                            "id": 1787,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7535:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_35e75e61f30307412ba5384c58db7a42837ee9c3b8226c16ef5f06453f34639f",
                                                                "typeString": "literal_string \"withdrawMultiple %s %s %s\""
                                                            },
                                                            "value": "withdrawMultiple %s %s %s"
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1788,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1350,
                                                                "src": "7564:8:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1790,
                                                            "indexExpression": {
                                                                "id": 1789,
                                                                "name": "account",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1766,
                                                                "src": "7573:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7564:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1791,
                                                                "name": "dest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1758,
                                                                "src": "7583:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                    "typeString": "address payable[] memory"
                                                                }
                                                            },
                                                            "id": 1793,
                                                            "indexExpression": {
                                                                "id": 1792,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7588:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7583:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1794,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7592:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1796,
                                                            "indexExpression": {
                                                                "id": 1795,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7599:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7592:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_35e75e61f30307412ba5384c58db7a42837ee9c3b8226c16ef5f06453f34639f",
                                                                "typeString": "literal_string \"withdrawMultiple %s %s %s\""
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 1784,
                                                            "name": "console",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 20920,
                                                            "src": "7523:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                                "typeString": "type(library console)"
                                                            }
                                                        },
                                                        "id": 1786,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "log",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 16802,
                                                        "src": "7523:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (string memory,uint256,address,uint256) view"
                                                        }
                                                    },
                                                    "id": 1797,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7523:79:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1798,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7523:79:4"
                                            },
                                            {
                                                "assignments": [
                                                    1800
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 1800,
                                                        "mutability": "mutable",
                                                        "name": "balance",
                                                        "nameLocation": "7624:7:4",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 1852,
                                                        "src": "7616:15:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                            "id": 1799,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7616:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 1804,
                                                "initialValue": {
                                                    "baseExpression": {
                                                        "id": 1801,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "7634:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1803,
                                                    "indexExpression": {
                                                        "id": 1802,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1766,
                                                        "src": "7643:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7634:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "7616:35:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 1810,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 1806,
                                                                "name": "balance",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1800,
                                                                "src": "7673:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": ">=",
                                                            "rightExpression": {
                                                                "baseExpression": {
                                                                    "id": 1807,
                                                                    "name": "amount",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1761,
                                                                    "src": "7684:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                        "typeString": "uint256[] memory"
                                                                    }
                                                                },
                                                                "id": 1809,
                                                                "indexExpression": {
                                                                    "id": 1808,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7691:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7684:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "7673:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "696e73756666696369656e742066756e6473",
                                                            "id": 1811,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7695:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                                "typeString": "literal_string \"insufficient funds\""
                                                            },
                                                            "value": "insufficient funds"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                                "typeString": "literal_string \"insufficient funds\""
                                                            }
                                                        ],
                                                        "id": 1805,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "7665:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1812,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7665:51:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1813,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7665:51:4"
                                            },
                                            {
                                                "expression": {
                                                    "id": 1822,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "baseExpression": {
                                                            "id": 1814,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "7730:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 1816,
                                                        "indexExpression": {
                                                            "id": 1815,
                                                            "name": "account",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1766,
                                                            "src": "7739:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "7730:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1821,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 1817,
                                                            "name": "balance",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1800,
                                                            "src": "7750:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                            "baseExpression": {
                                                                "id": 1818,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7760:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1820,
                                                            "indexExpression": {
                                                                "id": 1819,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7767:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7760:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "7750:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "7730:39:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1823,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7730:39:4"
                                            },
                                            {
                                                "assignments": [
                                                    1825,
                                                    null
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 1825,
                                                        "mutability": "mutable",
                                                        "name": "success",
                                                        "nameLocation": "7789:7:4",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 1852,
                                                        "src": "7784:12:4",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "typeName": {
                                                            "id": 1824,
                                                            "name": "bool",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7784:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    },
                                                    null
                                                ],
                                                "id": 1836,
                                                "initialValue": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "",
                                                            "id": 1834,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7833:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                    "typeString": "literal_string \"\""
                                                                }
                                                            ],
                                                            "expression": {
                                                                "baseExpression": {
                                                                    "id": 1826,
                                                                    "name": "dest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1758,
                                                                    "src": "7802:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                        "typeString": "address payable[] memory"
                                                                    }
                                                                },
                                                                "id": 1828,
                                                                "indexExpression": {
                                                                    "id": 1827,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7807:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7802:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "id": 1829,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "7802:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 1833,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "value"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "baseExpression": {
                                                                    "id": 1830,
                                                                    "name": "amount",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1761,
                                                                    "src": "7822:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                        "typeString": "uint256[] memory"
                                                                    }
                                                                },
                                                                "id": 1832,
                                                                "indexExpression": {
                                                                    "id": 1831,
                                                                    "name": "i",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1774,
                                                                    "src": "7829:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "7822:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "7802:30:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1835,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7802:34:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "7783:53:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 1838,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1825,
                                                            "src": "7858:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "5472616e73666572206661696c65642e",
                                                            "id": 1839,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7867:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                                                "typeString": "literal_string \"Transfer failed.\""
                                                            },
                                                            "value": "Transfer failed."
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                                                "typeString": "literal_string \"Transfer failed.\""
                                                            }
                                                        ],
                                                        "id": 1837,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "7850:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 1840,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7850:36:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1841,
                                                "nodeType": "ExpressionStatement",
                                                "src": "7850:36:4"
                                            },
                                            {
                                                "eventCall": {
                                                    "arguments": [
                                                        {
                                                            "id": 1843,
                                                            "name": "account",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1766,
                                                            "src": "7915:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1844,
                                                                "name": "dest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1758,
                                                                "src": "7924:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                                                    "typeString": "address payable[] memory"
                                                                }
                                                            },
                                                            "id": 1846,
                                                            "indexExpression": {
                                                                "id": 1845,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7929:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7924:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        {
                                                            "baseExpression": {
                                                                "id": 1847,
                                                                "name": "amount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "7933:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                                    "typeString": "uint256[] memory"
                                                                }
                                                            },
                                                            "id": 1849,
                                                            "indexExpression": {
                                                                "id": 1848,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1774,
                                                                "src": "7940:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "7933:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 1842,
                                                        "name": "Withdrawn",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5581,
                                                        "src": "7905:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                            "typeString": "function (address,address,uint256)"
                                                        }
                                                    },
                                                    "id": 1850,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7905:38:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1851,
                                                "nodeType": "EmitStatement",
                                                "src": "7900:43:4"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1780,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 1777,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1774,
                                            "src": "7485:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 1778,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1761,
                                                "src": "7489:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                }
                                            },
                                            "id": 1779,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "7489:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7485:17:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 1853,
                                    "initializationExpression": {
                                        "assignments": [
                                            1774
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 1774,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nameLocation": "7478:1:4",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 1853,
                                                "src": "7470:9:4",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 1773,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7470:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 1776,
                                        "initialValue": {
                                            "hexValue": "30",
                                            "id": 1775,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "7482:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "7470:13:4"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "id": 1782,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "7504:3:4",
                                            "subExpression": {
                                                "id": 1781,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1774,
                                                "src": "7504:1:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1783,
                                        "nodeType": "ExpressionStatement",
                                        "src": "7504:3:4"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "7465:489:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1755,
                            "nodeType": "StructuredDocumentation",
                            "src": "7272:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "72c1ab0c",
                        "id": 1855,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawMultiple",
                        "nameLocation": "7311:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1763,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "7391:8:4"
                        },
                        "parameters": {
                            "id": 1762,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1758,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nameLocation": "7353:4:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1855,
                                    "src": "7328:29:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1756,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7328:15:4",
                                            "stateMutability": "payable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "id": 1757,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7328:17:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                                            "typeString": "address payable[]"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1761,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "7376:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1855,
                                    "src": "7359:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 1759,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7359:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 1760,
                                        "nodeType": "ArrayTypeName",
                                        "src": "7359:9:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                            "typeString": "uint256[]"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7327:56:4"
                        },
                        "returnParameters": {
                            "id": 1764,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7400:0:4"
                        },
                        "scope": 3330,
                        "src": "7302:658:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1936,
                            "nodeType": "Block",
                            "src": "8237:964:4",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1880,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1870,
                                            "name": "gasAndDataLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1866,
                                            "src": "8247:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 1872,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1860,
                                                                        "src": "8289:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1873,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "8289:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1874,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8477,
                                                                "src": "8289:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 1871,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "8278:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1875,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8278:44:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IPaymaster_$5447",
                                                            "typeString": "contract IPaymaster"
                                                        }
                                                    },
                                                    "id": 1876,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "getGasAndDataLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5398,
                                                    "src": "8278:64:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$",
                                                        "typeString": "function () view external returns (struct IPaymaster.GasAndDataLimits memory)"
                                                    }
                                                },
                                                "id": 1878,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "hexValue": "3530303030",
                                                        "id": 1877,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8347:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_50000_by_1",
                                                            "typeString": "int_const 50000"
                                                        },
                                                        "value": "50000"
                                                    }
                                                ],
                                                "src": "8278:75:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$gas",
                                                    "typeString": "function () view external returns (struct IPaymaster.GasAndDataLimits memory)"
                                                }
                                            },
                                            "id": 1879,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8278:77:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                            }
                                        },
                                        "src": "8247:108:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                        }
                                    },
                                    "id": 1881,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8247:108:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1888,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 1883,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967281,
                                                            "src": "8373:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1884,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "src": "8373:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 1885,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8373:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1886,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8392:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1887,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "calldataSizeLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5390,
                                                    "src": "8392:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8373:53:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6d73672e64617461206578636565646564206c696d6974",
                                                "id": 1889,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8428:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8124b78d3dd31a400eb53d199bad655cb97b699e099427b3cac51776e60b8516",
                                                    "typeString": "literal_string \"msg.data exceeded limit\""
                                                },
                                                "value": "msg.data exceeded limit"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8124b78d3dd31a400eb53d199bad655cb97b699e099427b3cac51776e60b8516",
                                                    "typeString": "literal_string \"msg.data exceeded limit\""
                                                }
                                            ],
                                            "id": 1882,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8365:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1890,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8365:90:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1891,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8365:90:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1896,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1893,
                                                    "name": "maxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1857,
                                                    "src": "8474:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1894,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8497:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1895,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5384,
                                                    "src": "8497:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8474:56:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616363657074616e63652062756467657420746f6f2068696768",
                                                "id": 1897,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8532:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c09eb2507fe31010cbff9f16ad55e8d52db07096085e44c13ac5adb40ebed8bf",
                                                    "typeString": "literal_string \"acceptance budget too high\""
                                                },
                                                "value": "acceptance budget too high"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c09eb2507fe31010cbff9f16ad55e8d52db07096085e44c13ac5adb40ebed8bf",
                                                    "typeString": "literal_string \"acceptance budget too high\""
                                                }
                                            ],
                                            "id": 1892,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8466:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1898,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8466:95:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1899,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8466:95:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1905,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 1901,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8579:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1902,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5384,
                                                    "src": "8579:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 1903,
                                                        "name": "gasAndDataLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1866,
                                                        "src": "8616:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                        }
                                                    },
                                                    "id": 1904,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "preRelayedCallGasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5386,
                                                    "src": "8616:39:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8579:76:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "616363657074616e63652062756467657420746f6f206c6f77",
                                                "id": 1906,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8657:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2defbf8a2061ac91b77ceb8e097d54bcc569da825ca9932e52f018844a454958",
                                                    "typeString": "literal_string \"acceptance budget too low\""
                                                },
                                                "value": "acceptance budget too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2defbf8a2061ac91b77ceb8e097d54bcc569da825ca9932e52f018844a454958",
                                                    "typeString": "literal_string \"acceptance budget too low\""
                                                }
                                            ],
                                            "id": 1900,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "8571:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1907,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8571:114:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1908,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8571:114:4"
                                },
                                {
                                    "expression": {
                                        "id": 1915,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1909,
                                            "name": "maxPossibleGas",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1868,
                                            "src": "8696:14:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 1914,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 1910,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1860,
                                                        "src": "8713:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1911,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "8713:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1912,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "transactionCalldataGasUsed",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8473,
                                                "src": "8713:49:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 1913,
                                                "name": "initialGasLeft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1862,
                                                "src": "8765:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "8713:66:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8696:83:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1916,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8696:83:4"
                                },
                                {
                                    "assignments": [
                                        1918
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1918,
                                            "mutability": "mutable",
                                            "name": "maxPossibleCharge",
                                            "nameLocation": "8798:17:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1936,
                                            "src": "8790:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1917,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "8790:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1924,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 1920,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1868,
                                                "src": "8847:14:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 1921,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1860,
                                                    "src": "8875:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                "id": 1922,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8490,
                                                "src": "8875:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            ],
                                            "id": 1919,
                                            "name": "calculateCharge",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3073,
                                            "src": "8818:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                            }
                                        },
                                        "id": 1923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8818:89:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8790:117:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1932,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1926,
                                                    "name": "maxPossibleCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1918,
                                                    "src": "9089:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "baseExpression": {
                                                        "id": 1927,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "9110:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1931,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 1928,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1860,
                                                                "src": "9119:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1929,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "9119:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1930,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "9119:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9110:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9089:63:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "5061796d61737465722062616c616e636520746f6f206c6f77",
                                                "id": 1933,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9166:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                },
                                                "value": "Paymaster balance too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                }
                                            ],
                                            "id": 1925,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "9081:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1934,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9081:113:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1935,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9081:113:4"
                                }
                            ]
                        },
                        "id": 1937,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyGasAndDataLimits",
                        "nameLocation": "7975:22:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1863,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1857,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "8015:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8007:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1856,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8007:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1860,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "8075:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8044:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 1859,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1858,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "8044:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "8044:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1862,
                                    "mutability": "mutable",
                                    "name": "initialGasLeft",
                                    "nameLocation": "8105:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8097:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1861,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8097:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7997:128:4"
                        },
                        "returnParameters": {
                            "id": 1869,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1866,
                                    "mutability": "mutable",
                                    "name": "gasAndDataLimits",
                                    "nameLocation": "8195:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8160:51:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 1865,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1864,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "8160:27:4"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "8160:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1868,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "8221:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1937,
                                    "src": "8213:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1867,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8213:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8159:77:4"
                        },
                        "scope": 3330,
                        "src": "7966:1235:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "canonicalName": "RelayHub.RelayCallData",
                        "id": 1976,
                        "members": [
                            {
                                "constant": false,
                                "id": 1939,
                                "mutability": "mutable",
                                "name": "success",
                                "nameLocation": "9243:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9238:12:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1938,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9238:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1941,
                                "mutability": "mutable",
                                "name": "functionSelector",
                                "nameLocation": "9267:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9260:23:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                },
                                "typeName": {
                                    "id": 1940,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9260:6:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1943,
                                "mutability": "mutable",
                                "name": "initialGasLeft",
                                "nameLocation": "9301:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9293:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1942,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9293:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1945,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nameLocation": "9331:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9325:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1944,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9325:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1947,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nameLocation": "9363:22:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9357:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1946,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9357:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1950,
                                "mutability": "mutable",
                                "name": "gasAndDataLimits",
                                "nameLocation": "9423:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9395:44:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                    "typeString": "struct IPaymaster.GasAndDataLimits"
                                },
                                "typeName": {
                                    "id": 1949,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 1948,
                                        "name": "IPaymaster.GasAndDataLimits",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 5391,
                                        "src": "9395:27:4"
                                    },
                                    "referencedDeclaration": 5391,
                                    "src": "9395:27:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1953,
                                "mutability": "mutable",
                                "name": "status",
                                "nameLocation": "9465:6:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9449:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                },
                                "typeName": {
                                    "id": 1952,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 1951,
                                        "name": "RelayCallStatus",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 5668,
                                        "src": "9449:15:4"
                                    },
                                    "referencedDeclaration": 5668,
                                    "src": "9449:15:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1955,
                                "mutability": "mutable",
                                "name": "innerGasUsed",
                                "nameLocation": "9489:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9481:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1954,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9481:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1957,
                                "mutability": "mutable",
                                "name": "maxPossibleGas",
                                "nameLocation": "9519:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9511:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1956,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9511:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1959,
                                "mutability": "mutable",
                                "name": "innerGasLimit",
                                "nameLocation": "9551:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9543:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1958,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9543:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1961,
                                "mutability": "mutable",
                                "name": "gasBeforeInner",
                                "nameLocation": "9582:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9574:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1960,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9574:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1963,
                                "mutability": "mutable",
                                "name": "gasUsed",
                                "nameLocation": "9614:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9606:15:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1962,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9606:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1965,
                                "mutability": "mutable",
                                "name": "devCharge",
                                "nameLocation": "9639:9:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9631:17:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1964,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9631:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1967,
                                "mutability": "mutable",
                                "name": "retData",
                                "nameLocation": "9664:7:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9658:13:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1966,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9658:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1969,
                                "mutability": "mutable",
                                "name": "relayManager",
                                "nameLocation": "9689:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9681:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 1968,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9681:7:4",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1971,
                                "mutability": "mutable",
                                "name": "relayRequestId",
                                "nameLocation": "9719:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9711:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 1970,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9711:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1973,
                                "mutability": "mutable",
                                "name": "tmpInitialGas",
                                "nameLocation": "9751:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9743:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1972,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9743:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1975,
                                "mutability": "mutable",
                                "name": "relayCallStatus",
                                "nameLocation": "9780:15:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 1976,
                                "src": "9774:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1974,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9774:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayCallData",
                        "nameLocation": "9214:13:4",
                        "nodeType": "StructDefinition",
                        "scope": 3330,
                        "src": "9207:595:4",
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5729
                        ],
                        "body": {
                            "id": 2676,
                            "nodeType": "Block",
                            "src": "10245:8006:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2003
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2003,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nameLocation": "10276:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2676,
                                            "src": "10255:25:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                "typeString": "struct RelayHub.RelayCallData"
                                            },
                                            "typeName": {
                                                "id": 2002,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 2001,
                                                    "name": "RelayCallData",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 1976,
                                                    "src": "10255:13:4"
                                                },
                                                "referencedDeclaration": 1976,
                                                "src": "10255:13:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_storage_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2004,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10255:25:4"
                                },
                                {
                                    "expression": {
                                        "id": 2010,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2005,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "10290:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2007,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "initialGasLeft",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1943,
                                            "src": "10290:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 2008,
                                                "name": "aggregateGasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3329,
                                                "src": "10312:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 2009,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "10312:18:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "10290:40:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2011,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10290:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 2020,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2012,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "10340:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2014,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "relayRequestId",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1971,
                                            "src": "10340:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 2017,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1984,
                                                    "src": "10389:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2018,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1986,
                                                    "src": "10403:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2015,
                                                    "name": "GsnUtils",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 8572,
                                                    "src": "10362:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_GsnUtils_$8572_$",
                                                        "typeString": "type(library GsnUtils)"
                                                    }
                                                },
                                                "id": 2016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "getRelayRequestID",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8527,
                                                "src": "10362:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bytes32_$",
                                                    "typeString": "function (struct GsnTypes.RelayRequest calldata,bytes calldata) pure returns (bytes32)"
                                                }
                                            },
                                            "id": 2019,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "10362:51:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "src": "10340:73:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "id": 2021,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10340:73:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573744964",
                                                "id": 2025,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10436:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_17cf934ba81fac1d8620873aadad9ead0d331f60e054b56fd4bdd931ac9dbaa0",
                                                    "typeString": "literal_string \"relayCall relayRequestId\""
                                                },
                                                "value": "relayCall relayRequestId"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_17cf934ba81fac1d8620873aadad9ead0d331f60e054b56fd4bdd931ac9dbaa0",
                                                    "typeString": "literal_string \"relayCall relayRequestId\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2022,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10424:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2024,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "10424:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2026,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10424:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2027,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10424:39:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 2031,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2003,
                                                    "src": "10492:4:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                    }
                                                },
                                                "id": 2032,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayRequestId",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1971,
                                                "src": "10492:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2028,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10473:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2030,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes32",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13423,
                                            "src": "10473:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
                                                "typeString": "function (bytes32) view"
                                            }
                                        },
                                        "id": 2033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10473:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2034,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10473:39:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6d",
                                                "id": 2038,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10534:37:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_fcf4382d5f60777d98e6d391203c11683d0ed0db92e205110476e67f8f3b11a4",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.from\""
                                                },
                                                "value": "relayCall relayRequest.request.from"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2039,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10573:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2040,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10573:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2041,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "from",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5045,
                                                "src": "10573:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_fcf4382d5f60777d98e6d391203c11683d0ed0db92e205110476e67f8f3b11a4",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.from\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2035,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10522:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2037,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "10522:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2042,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10522:77:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2043,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10522:77:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e746f",
                                                "id": 2047,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10621:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4b8ff89d45b95d24487df110e72d76cead04f7aff50f34d4b700cbd414b99317",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.to\""
                                                },
                                                "value": "relayCall relayRequest.request.to"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2048,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10658:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2049,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10658:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2050,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "to",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5047,
                                                "src": "10658:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_4b8ff89d45b95d24487df110e72d76cead04f7aff50f34d4b700cbd414b99317",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.to\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2044,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10609:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2046,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "10609:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2051,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10609:73:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2052,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10609:73:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e76616c7565",
                                                "id": 2056,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10704:38:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_bca1306277b61fccfde35601adff89eeab65a35e8295aaa37de6cf3300d0fc1a",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.value\""
                                                },
                                                "value": "relayCall relayRequest.request.value"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2057,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10744:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2058,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10744:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2059,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5049,
                                                "src": "10744:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_bca1306277b61fccfde35601adff89eeab65a35e8295aaa37de6cf3300d0fc1a",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.value\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2053,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10692:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2055,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10692:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2060,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10692:79:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2061,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10692:79:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e676173",
                                                "id": 2065,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10793:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_583a060fa38a133546f4edc469d090b6ae76e02bfaf0a35053830ec8f4a19495",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.gas\""
                                                },
                                                "value": "relayCall relayRequest.request.gas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2066,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10831:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2067,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10831:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2068,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "gas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5051,
                                                "src": "10831:24:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_583a060fa38a133546f4edc469d090b6ae76e02bfaf0a35053830ec8f4a19495",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.gas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2062,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10781:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2064,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10781:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2069,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10781:75:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2070,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10781:75:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e6365",
                                                "id": 2074,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10878:38:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_462711ad34c7bac38f50476b17264f6718ca27eafffe4802fe0a12964b3f1252",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.nonce\""
                                                },
                                                "value": "relayCall relayRequest.request.nonce"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2075,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "10918:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2076,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "10918:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2077,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "nonce",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5053,
                                                "src": "10918:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_462711ad34c7bac38f50476b17264f6718ca27eafffe4802fe0a12964b3f1252",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.nonce\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2071,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10866:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2073,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10866:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10866:79:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2079,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10866:79:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65",
                                                "id": 2083,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "10967:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2a5dd65da862186f68e7bb0fb08b28389d888938a5f238b42e57d99194c66e0d",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.validUntilTime\""
                                                },
                                                "value": "relayCall relayRequest.request.validUntilTime"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2084,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11016:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2085,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "11016:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2086,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "validUntilTime",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5057,
                                                "src": "11016:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_2a5dd65da862186f68e7bb0fb08b28389d888938a5f238b42e57d99194c66e0d",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.validUntilTime\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2080,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "10955:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2082,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "10955:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2087,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10955:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2088,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10955:97:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d6178466565506572476173",
                                                "id": 2092,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11075:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_74525e67d8510b3d1f6bb1bed729e3715a0c824b4f3401aa2e2fedd322bdc92d",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxFeePerGas\""
                                                },
                                                "value": "relayCall relayRequest.relayData.maxFeePerGas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2093,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11124:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2094,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11124:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2095,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "11124:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_74525e67d8510b3d1f6bb1bed729e3715a0c824b4f3401aa2e2fedd322bdc92d",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxFeePerGas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2089,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11063:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2091,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11063:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2096,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11063:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2097,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11063:97:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f72697479466565506572476173",
                                                "id": 2101,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11182:55:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b5f4e42ead408476c38331a2d23e3c8c156cc8275d32e860c5367b57911830ed",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxPriorityFeePerGas\""
                                                },
                                                "value": "relayCall relayRequest.relayData.maxPriorityFeePerGas"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2102,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11239:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2103,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11239:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2104,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxPriorityFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8471,
                                                "src": "11239:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_b5f4e42ead408476c38331a2d23e3c8c156cc8275d32e860c5367b57911830ed",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.maxPriorityFeePerGas\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2098,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11170:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11170:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11170:113:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2106,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11170:113:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c6461746147617355736564",
                                                "id": 2110,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11305:61:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_6217d1a22ef9196a0d9c4564b6579717fe9ce9b2d24e62e096c11813679fe585",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.transactionCalldataGasUsed\""
                                                },
                                                "value": "relayCall relayRequest.relayData.transactionCalldataGasUsed"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2111,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11368:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2112,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11368:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2113,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "transactionCalldataGasUsed",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8473,
                                                "src": "11368:49:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_6217d1a22ef9196a0d9c4564b6579717fe9ce9b2d24e62e096c11813679fe585",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.transactionCalldataGasUsed\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2107,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11293:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2109,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11293:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2114,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11293:125:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2115,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11293:125:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b6572",
                                                "id": 2119,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11440:46:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_012e98baaf2f6664fed0896d17b47356836f7c0d0d2cdbc7ce843f9f1aca29fa",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.relayWorker\""
                                                },
                                                "value": "relayCall relayRequest.relayData.relayWorker"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2120,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11488:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2121,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11488:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2122,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayWorker",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8475,
                                                "src": "11488:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_012e98baaf2f6664fed0896d17b47356836f7c0d0d2cdbc7ce843f9f1aca29fa",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.relayWorker\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2116,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11428:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2118,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11428:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2123,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11428:95:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2124,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11428:95:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d6173746572",
                                                "id": 2128,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11545:44:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f07d588f5c3629a800a71957fb3cc3c26c332fb5f6674cd9cafb3f56490efe69",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymaster\""
                                                },
                                                "value": "relayCall relayRequest.relayData.paymaster"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2129,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11591:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2130,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11591:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2131,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "11591:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_f07d588f5c3629a800a71957fb3cc3c26c332fb5f6674cd9cafb3f56490efe69",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymaster\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2125,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11533:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2127,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11533:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2132,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11533:91:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2133,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11533:91:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f72776172646572",
                                                "id": 2137,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11646:44:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ea0ed7e902cd07af7c652761679cee8934121d73b718614032daeae4f7f1315b",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.forwarder\""
                                                },
                                                "value": "relayCall relayRequest.relayData.forwarder"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2138,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11692:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11692:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2140,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "forwarder",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8479,
                                                "src": "11692:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_ea0ed7e902cd07af7c652761679cee8934121d73b718614032daeae4f7f1315b",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.forwarder\""
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2134,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11634:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2136,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13615,
                                            "src": "11634:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$returns$__$",
                                                "typeString": "function (string memory,address) view"
                                            }
                                        },
                                        "id": 2141,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11634:91:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2142,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11634:91:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e744964",
                                                "id": 2146,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11747:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_80a38148546f46ff570877c8e66fab19ecb1e2902012e1182452ed0de412f895",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.clientId\""
                                                },
                                                "value": "relayCall relayRequest.relayData.clientId"
                                            },
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2147,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "11792:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2148,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "11792:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2149,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "clientId",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8483,
                                                "src": "11792:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_80a38148546f46ff570877c8e66fab19ecb1e2902012e1182452ed0de412f895",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.clientId\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2143,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11735:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2145,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "11735:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2150,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11735:89:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2151,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11735:89:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c20646f6d61696e536570617261746f724e616d65",
                                                "id": 2155,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11847:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_57e3e23c7a70bb0820dfdd7e0506d6e49aa2cc1206cb517aa2290b1d6793b7d0",
                                                    "typeString": "literal_string \"relayCall domainSeparatorName\""
                                                },
                                                "value": "relayCall domainSeparatorName"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_57e3e23c7a70bb0820dfdd7e0506d6e49aa2cc1206cb517aa2290b1d6793b7d0",
                                                    "typeString": "literal_string \"relayCall domainSeparatorName\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2152,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11835:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2154,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "11835:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2156,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11835:44:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2157,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11835:44:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2161,
                                                "name": "domainSeparatorName",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1979,
                                                "src": "11907:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2158,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11889:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2160,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logString",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12933,
                                            "src": "11889:17:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2162,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11889:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2163,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11889:38:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c207369676e6174757265",
                                                "id": 2167,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11949:21:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a214e1cff23aa03adbec3351fff6efdc512aa58b865a8a2a423818c5d6ce54bc",
                                                    "typeString": "literal_string \"relayCall signature\""
                                                },
                                                "value": "relayCall signature"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_a214e1cff23aa03adbec3351fff6efdc512aa58b865a8a2a423818c5d6ce54bc",
                                                    "typeString": "literal_string \"relayCall signature\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2164,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11937:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2166,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "11937:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11937:34:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2169,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11937:34:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2173,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1986,
                                                "src": "11998:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2170,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "11981:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2172,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "11981:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2174,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11981:27:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2175,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11981:27:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c20617070726f76616c44617461",
                                                "id": 2179,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12030:24:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_a7aa56e8bdb96014d12654732651578864a151e28a1ae9270363ba13f2b16a4f",
                                                    "typeString": "literal_string \"relayCall approvalData\""
                                                },
                                                "value": "relayCall approvalData"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_a7aa56e8bdb96014d12654732651578864a151e28a1ae9270363ba13f2b16a4f",
                                                    "typeString": "literal_string \"relayCall approvalData\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2176,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12018:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2178,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12018:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2180,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12018:37:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2181,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12018:37:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2185,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1988,
                                                "src": "12082:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2182,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12065:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2184,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12065:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2186,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12065:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2187,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12065:30:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e726571756573742e64617461",
                                                "id": 2191,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12117:37:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_dae5a2120924253660b82d2446bfb35c23d96045644aebf1dcf6cc096584b8a1",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.data\""
                                                },
                                                "value": "relayCall relayRequest.request.data"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_dae5a2120924253660b82d2446bfb35c23d96045644aebf1dcf6cc096584b8a1",
                                                    "typeString": "literal_string \"relayCall relayRequest.request.data\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2188,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12105:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2190,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12105:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2192,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12105:50:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2193,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12105:50:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2197,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "12182:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2198,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "request",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8487,
                                                    "src": "12182:20:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                    }
                                                },
                                                "id": 2199,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "data",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5055,
                                                "src": "12182:25:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2194,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12165:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2196,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12165:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2200,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12165:43:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2201,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12165:43:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657244617461",
                                                "id": 2205,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12230:48:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_bf2b9bbecd54d292b365355d7093f4c73d81970e27e2402429cc66edb165d359",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymasterData\""
                                                },
                                                "value": "relayCall relayRequest.relayData.paymasterData"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_bf2b9bbecd54d292b365355d7093f4c73d81970e27e2402429cc66edb165d359",
                                                    "typeString": "literal_string \"relayCall relayRequest.relayData.paymasterData\""
                                                }
                                            ],
                                            "expression": {
                                                "id": 2202,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12218:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2204,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13451,
                                            "src": "12218:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (string memory) view"
                                            }
                                        },
                                        "id": 2206,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12218:61:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2207,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12218:61:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2211,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1984,
                                                        "src": "12306:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2212,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "12306:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2213,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymasterData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8481,
                                                "src": "12306:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2208,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12289:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2210,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "logBytes",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12975,
                                            "src": "12289:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) view"
                                            }
                                        },
                                        "id": 2214,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12289:54:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2215,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12289:54:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "72656c617943616c6c206d6178416363657074616e6365427564676574",
                                                "id": 2219,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12365:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46424519ad66645695190d8710d685acabbf95518dd85a7c64c069c7a53f2862",
                                                    "typeString": "literal_string \"relayCall maxAcceptanceBudget\""
                                                },
                                                "value": "relayCall maxAcceptanceBudget"
                                            },
                                            {
                                                "id": 2220,
                                                "name": "maxAcceptanceBudget",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1981,
                                                "src": "12398:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_stringliteral_46424519ad66645695190d8710d685acabbf95518dd85a7c64c069c7a53f2862",
                                                    "typeString": "literal_string \"relayCall maxAcceptanceBudget\""
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2216,
                                                "name": "console",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20920,
                                                "src": "12353:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_console_$20920_$",
                                                    "typeString": "type(library console)"
                                                }
                                            },
                                            "id": 2218,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "log",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13564,
                                            "src": "12353:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (string memory,uint256) view"
                                            }
                                        },
                                        "id": 2221,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12353:65:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2222,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12353:65:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2226,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12437:15:4",
                                                "subExpression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 2224,
                                                        "name": "isDeprecated",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3188,
                                                        "src": "12438:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                                            "typeString": "function () view returns (bool)"
                                                        }
                                                    },
                                                    "id": 2225,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12438:14:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "6875622064657072656361746564",
                                                "id": 2227,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "12454:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0edc2e44909d347a87677b1b00401536fb358ed396bf0528207a9816dbaa5b21",
                                                    "typeString": "literal_string \"hub deprecated\""
                                                },
                                                "value": "hub deprecated"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0edc2e44909d347a87677b1b00401536fb358ed396bf0528207a9816dbaa5b21",
                                                    "typeString": "literal_string \"hub deprecated\""
                                                }
                                            ],
                                            "id": 2223,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "12429:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2228,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12429:42:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2229,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12429:42:4"
                                },
                                {
                                    "expression": {
                                        "id": 2251,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2230,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2003,
                                                "src": "12481:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 2232,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "functionSelector",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1941,
                                            "src": "12481:21:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2238,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2233,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "12505:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2234,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "12505:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2235,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "12505:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    "id": 2236,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "12505:32:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "hexValue": "34",
                                                    "id": 2237,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "12539:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_4_by_1",
                                                        "typeString": "int_const 4"
                                                    },
                                                    "value": "4"
                                                },
                                                "src": "12505:35:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseExpression": {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 2248,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "12605:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 2247,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "12598:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bytes4_$",
                                                        "typeString": "type(bytes4)"
                                                    },
                                                    "typeName": {
                                                        "id": 2246,
                                                        "name": "bytes4",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12598:6:4",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 2249,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12598:9:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "id": 2250,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "Conditional",
                                            "src": "12505:102:4",
                                            "trueExpression": {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2241,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "12566:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2242,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "12566:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2243,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5055,
                                                        "src": "12566:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "30",
                                                        "id": 2244,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "12593:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 2239,
                                                        "name": "MinLibBytes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8687,
                                                        "src": "12543:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_MinLibBytes_$8687_$",
                                                            "typeString": "type(library MinLibBytes)"
                                                        }
                                                    },
                                                    "id": 2240,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "readBytes4",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8686,
                                                    "src": "12543:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes4_$",
                                                        "typeString": "function (bytes memory,uint256) pure returns (bytes4)"
                                                    }
                                                },
                                                "id": 2245,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "12543:52:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes4",
                                                    "typeString": "bytes4"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "src": "12481:126:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "id": 2252,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12481:126:4"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 2261,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "id": 2256,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 2253,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967281,
                                                    "src": "12622:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2254,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "12622:10:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "id": 2255,
                                                "name": "batchGateway",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1231,
                                                "src": "12636:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "src": "12622:26:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "id": 2260,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "expression": {
                                                    "id": 2257,
                                                    "name": "tx",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967270,
                                                    "src": "12652:2:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_transaction",
                                                        "typeString": "tx"
                                                    }
                                                },
                                                "id": 2258,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "origin",
                                                "nodeType": "MemberAccess",
                                                "src": "12652:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "id": 2259,
                                                "name": "DRY_RUN_ADDRESS",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1214,
                                                "src": "12665:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "src": "12652:28:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "12622:58:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2290,
                                    "nodeType": "IfStatement",
                                    "src": "12618:322:4",
                                    "trueBody": {
                                        "id": 2289,
                                        "nodeType": "Block",
                                        "src": "12682:258:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2266,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2263,
                                                                    "name": "signature",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1986,
                                                                    "src": "12704:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                "id": 2264,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "length",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12704:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "!=",
                                                            "rightExpression": {
                                                                "hexValue": "30",
                                                                "id": 2265,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "12724:1:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                "value": "0"
                                                            },
                                                            "src": "12704:21:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "6d697373696e67207369676e6174757265206f72206261642067617465776179",
                                                            "id": 2267,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12727:34:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_629cb97a040744050f855d781a40fdb10d8ddadf722549b88a7aae91ea1a2352",
                                                                "typeString": "literal_string \"missing signature or bad gateway\""
                                                            },
                                                            "value": "missing signature or bad gateway"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_629cb97a040744050f855d781a40fdb10d8ddadf722549b88a7aae91ea1a2352",
                                                                "typeString": "literal_string \"missing signature or bad gateway\""
                                                            }
                                                        ],
                                                        "id": 2262,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12696:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2268,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12696:66:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2269,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12696:66:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2275,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2271,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "12784:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2272,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12784:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "id": 2273,
                                                                    "name": "tx",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967270,
                                                                    "src": "12798:2:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_transaction",
                                                                        "typeString": "tx"
                                                                    }
                                                                },
                                                                "id": 2274,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "origin",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12798:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "12784:23:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "72656c617920776f726b6572206d75737420626520454f41",
                                                            "id": 2276,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12809:26:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_5aac529f1934cfdfceff3677a77f5553495c6ad3ebc3cea9589311813041a0ca",
                                                                "typeString": "literal_string \"relay worker must be EOA\""
                                                            },
                                                            "value": "relay worker must be EOA"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_5aac529f1934cfdfceff3677a77f5553495c6ad3ebc3cea9589311813041a0ca",
                                                                "typeString": "literal_string \"relay worker must be EOA\""
                                                            }
                                                        ],
                                                        "id": 2270,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12776:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2277,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12776:60:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2278,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12776:60:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2285,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2280,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "12858:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2281,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "12858:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 2282,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1984,
                                                                        "src": "12872:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 2283,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "12872:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 2284,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayWorker",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8475,
                                                                "src": "12872:34:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "12858:48:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4e6f74206120726967687420776f726b6572",
                                                            "id": 2286,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "12908:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                                "typeString": "literal_string \"Not a right worker\""
                                                            },
                                                            "value": "Not a right worker"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                                "typeString": "literal_string \"Not a right worker\""
                                                            }
                                                        ],
                                                        "id": 2279,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "12850:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2287,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12850:79:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2288,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12850:79:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 2294,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 2291,
                                                "name": "tx",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967270,
                                                "src": "12954:2:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_transaction",
                                                    "typeString": "tx"
                                                }
                                            },
                                            "id": 2292,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "origin",
                                            "nodeType": "MemberAccess",
                                            "src": "12954:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "!=",
                                        "rightExpression": {
                                            "id": 2293,
                                            "name": "DRY_RUN_ADDRESS",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1214,
                                            "src": "12967:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "12954:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2322,
                                    "nodeType": "IfStatement",
                                    "src": "12950:265:4",
                                    "trueBody": {
                                        "id": 2321,
                                        "nodeType": "Block",
                                        "src": "12984:231:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 2303,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "expression": {
                                                            "id": 2295,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "12998:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2297,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "memberName": "relayManager",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1969,
                                                        "src": "12998:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "baseExpression": {
                                                            "id": 2298,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1342,
                                                            "src": "13018:15:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 2302,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2299,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "13034:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2300,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "13034:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2301,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayWorker",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8475,
                                                            "src": "13034:34:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "13018:51:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "12998:71:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 2304,
                                                "nodeType": "ExpressionStatement",
                                                "src": "12998:71:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 2312,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 2306,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "13091:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2307,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayManager",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1969,
                                                                "src": "13091:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "!=",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "30",
                                                                        "id": 2310,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "13120:1:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        },
                                                                        "value": "0"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "id": 2309,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "13112:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2308,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "13112:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 2311,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "13112:10:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "13091:31:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                            "id": 2313,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "13124:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                                "typeString": "literal_string \"Unknown relay worker\""
                                                            },
                                                            "value": "Unknown relay worker"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                                "typeString": "literal_string \"Unknown relay worker\""
                                                            }
                                                        ],
                                                        "id": 2305,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            4294967278,
                                                            4294967278
                                                        ],
                                                        "referencedDeclaration": 4294967278,
                                                        "src": "13083:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 2314,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13083:64:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2315,
                                                "nodeType": "ExpressionStatement",
                                                "src": "13083:64:4"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2317,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "13186:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2318,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayManager",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1969,
                                                            "src": "13186:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 2316,
                                                        "name": "verifyRelayManagerStaked",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3150,
                                                        "src": "13161:24:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                                                            "typeString": "function (address) view"
                                                        }
                                                    },
                                                    "id": 2319,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13161:43:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2320,
                                                "nodeType": "ExpressionStatement",
                                                "src": "13161:43:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "id": 2335,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "components": [
                                                {
                                                    "expression": {
                                                        "id": 2323,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13226:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2325,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasAndDataLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1950,
                                                    "src": "13226:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2326,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13249:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2327,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "maxPossibleGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1957,
                                                    "src": "13249:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "id": 2328,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "13225:44:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasAndDataLimits memory,uint256)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 2330,
                                                    "name": "maxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1981,
                                                    "src": "13307:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "id": 2331,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1984,
                                                    "src": "13328:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2332,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13342:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2333,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "initialGasLeft",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1943,
                                                    "src": "13342:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "id": 2329,
                                                "name": "verifyGasAndDataLimits",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1937,
                                                "src": "13284:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_uint256_$returns$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                    "typeString": "function (uint256,struct GsnTypes.RelayRequest calldata,uint256) view returns (struct IPaymaster.GasAndDataLimits memory,uint256)"
                                                }
                                            },
                                            "id": 2334,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "13284:78:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasAndDataLimits_$5391_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasAndDataLimits memory,uint256)"
                                            }
                                        },
                                        "src": "13225:137:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2336,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13225:137:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2340,
                                                "name": "domainSeparatorName",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1979,
                                                "src": "13416:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            },
                                            {
                                                "id": 2341,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1984,
                                                "src": "13436:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            },
                                            {
                                                "id": 2342,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1986,
                                                "src": "13449:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "id": 2343,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1988,
                                                "src": "13459:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2337,
                                                "name": "RelayHubValidator",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 9499,
                                                "src": "13373:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_RelayHubValidator_$9499_$",
                                                    "typeString": "type(library RelayHubValidator)"
                                                }
                                            },
                                            "id": 2339,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "verifyTransactionPacking",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 9472,
                                            "src": "13373:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_calldata_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$",
                                                "typeString": "function (string calldata,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata) pure"
                                            }
                                        },
                                        "id": 2344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13373:99:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2345,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13373:99:4"
                                },
                                {
                                    "id": 2464,
                                    "nodeType": "Block",
                                    "src": "13479:2202:4",
                                    "statements": [
                                        {
                                            "expression": {
                                                "id": 2358,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2346,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13660:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2348,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasLimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1959,
                                                    "src": "13660:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2357,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2354,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2352,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 2349,
                                                                    "name": "gasleft",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967289,
                                                                    "src": "13681:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                        "typeString": "function () view returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 2350,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "13681:9:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "hexValue": "3633",
                                                                "id": 2351,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "13691:2:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_63_by_1",
                                                                    "typeString": "int_const 63"
                                                                },
                                                                "value": "63"
                                                            },
                                                            "src": "13681:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "/",
                                                        "rightExpression": {
                                                            "hexValue": "3634",
                                                            "id": 2353,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "13694:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_64_by_1",
                                                                "typeString": "int_const 64"
                                                            },
                                                            "value": "64"
                                                        },
                                                        "src": "13681:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2355,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "13698:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2356,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasReserve",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5541,
                                                        "src": "13698:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "13681:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "13660:55:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2359,
                                            "nodeType": "ExpressionStatement",
                                            "src": "13660:55:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2365,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2360,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "13725:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2362,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasBeforeInner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1961,
                                                    "src": "13725:19:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 2363,
                                                        "name": "aggregateGasleft",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3329,
                                                        "src": "13747:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                            "typeString": "function () view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2364,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "13747:18:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "13725:40:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2366,
                                            "nodeType": "ExpressionStatement",
                                            "src": "13725:40:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2385,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2367,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "14562:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2369,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "tmpInitialGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1973,
                                                    "src": "14562:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2384,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2381,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 2378,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2375,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "expression": {
                                                                            "id": 2370,
                                                                            "name": "relayRequest",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1984,
                                                                            "src": "14583:12:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                            }
                                                                        },
                                                                        "id": 2371,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "relayData",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 8490,
                                                                        "src": "14583:22:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                                        }
                                                                    },
                                                                    "id": 2372,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "transactionCalldataGasUsed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8473,
                                                                    "src": "14583:49:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "+",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2373,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "14635:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2374,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "initialGasLeft",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1943,
                                                                    "src": "14635:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "14583:71:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                                "expression": {
                                                                    "id": 2376,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "14657:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2377,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "innerGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1959,
                                                                "src": "14657:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "14583:92:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 2379,
                                                                "name": "config",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1236,
                                                                "src": "14678:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                }
                                                            },
                                                            "id": 2380,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "gasOverhead",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5545,
                                                            "src": "14678:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "14583:113:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2382,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "14699:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2383,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "postOverhead",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5543,
                                                        "src": "14699:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "14583:135:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "14562:156:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2386,
                                            "nodeType": "ExpressionStatement",
                                            "src": "14562:156:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2421,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2387,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "14987:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2389,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "success",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1939,
                                                            "src": "14987:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2390,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15001:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2391,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayCallStatus",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1975,
                                                            "src": "15001:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2392,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "14986:36:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "expression": {
                                                                            "id": 2403,
                                                                            "name": "RelayHub",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3330,
                                                                            "src": "15104:8:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_type$_t_contract$_RelayHub_$3330_$",
                                                                                "typeString": "type(contract RelayHub)"
                                                                            }
                                                                        },
                                                                        "id": 2404,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "lValueRequested": false,
                                                                        "memberName": "innerRelayCall",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 2956,
                                                                        "src": "15104:23:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_string_calldata_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_struct$_GasAndDataLimits_$5391_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "function RelayHub.innerRelayCall(string calldata,struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,struct IPaymaster.GasAndDataLimits calldata,uint256,uint256) returns (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                        }
                                                                    },
                                                                    "id": 2405,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "selector",
                                                                    "nodeType": "MemberAccess",
                                                                    "src": "15104:32:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes4",
                                                                        "typeString": "bytes4"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2406,
                                                                    "name": "domainSeparatorName",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1979,
                                                                    "src": "15138:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_string_calldata_ptr",
                                                                        "typeString": "string calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2407,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "15159:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2408,
                                                                    "name": "signature",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1986,
                                                                    "src": "15173:9:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2409,
                                                                    "name": "approvalData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1988,
                                                                    "src": "15184:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2410,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15198:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2411,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "gasAndDataLimits",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1950,
                                                                    "src": "15198:21:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                    }
                                                                },
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 2416,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 2412,
                                                                            "name": "vars",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 2003,
                                                                            "src": "15233:4:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                            }
                                                                        },
                                                                        "id": 2413,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "tmpInitialGas",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 1973,
                                                                        "src": "15233:18:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "-",
                                                                    "rightExpression": {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 2414,
                                                                            "name": "aggregateGasleft",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3329,
                                                                            "src": "15254:16:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                                "typeString": "function () view returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 2415,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15254:18:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "15233:39:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2417,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15308:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2418,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "maxPossibleGas",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1957,
                                                                    "src": "15308:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes4",
                                                                        "typeString": "bytes4"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_string_calldata_ptr",
                                                                        "typeString": "string calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                                        "typeString": "bytes calldata"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 2401,
                                                                    "name": "abi",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967295,
                                                                    "src": "15081:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_abi",
                                                                        "typeString": "abi"
                                                                    }
                                                                },
                                                                "id": 2402,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "encodeWithSelector",
                                                                "nodeType": "MemberAccess",
                                                                "src": "15081:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                                }
                                                            },
                                                            "id": 2419,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "15081:260:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 2395,
                                                                        "name": "this",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 4294967268,
                                                                        "src": "15033:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                            "typeString": "contract RelayHub"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                            "typeString": "contract RelayHub"
                                                                        }
                                                                    ],
                                                                    "id": 2394,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "15025:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2393,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "15025:7:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 2396,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "15025:13:4",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 2397,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "15025:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 2400,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "expression": {
                                                                    "id": 2398,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "15048:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2399,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "innerGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1959,
                                                                "src": "15048:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "15025:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2420,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15025:326:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "14986:365:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2422,
                                            "nodeType": "ExpressionStatement",
                                            "src": "14986:365:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2431,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2423,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "15361:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2425,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1955,
                                                    "src": "15361:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2430,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 2426,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "15381:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2427,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasBeforeInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1961,
                                                        "src": "15381:19:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 2428,
                                                            "name": "aggregateGasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3329,
                                                            "src": "15401:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 2429,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "15401:18:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "15381:38:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "15361:58:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2432,
                                            "nodeType": "ExpressionStatement",
                                            "src": "15361:58:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2448,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2433,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15430:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2435,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "status",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1953,
                                                            "src": "15430:11:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2436,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15443:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2437,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1947,
                                                            "src": "15443:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2438,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15429:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2441,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "15485:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2442,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayCallStatus",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1975,
                                                            "src": "15485:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "components": [
                                                                {
                                                                    "id": 2443,
                                                                    "name": "RelayCallStatus",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5668,
                                                                    "src": "15508:15:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2445,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "15525:5:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2444,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "15525:5:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2446,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "15507:24:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$5668_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$5668_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2439,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967295,
                                                            "src": "15474:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2440,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "src": "15474:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 2447,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15474:58:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "src": "15429:103:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2449,
                                            "nodeType": "ExpressionStatement",
                                            "src": "15429:103:4"
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2454,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2450,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "15547:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2451,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallReturnValue",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1947,
                                                        "src": "15547:27:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 2452,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "src": "15547:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 2453,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15582:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "15547:36:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2463,
                                            "nodeType": "IfStatement",
                                            "src": "15542:133:4",
                                            "trueBody": {
                                                "id": 2462,
                                                "nodeType": "Block",
                                                "src": "15586:89:4",
                                                "statements": [
                                                    {
                                                        "eventCall": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2456,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15623:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2457,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "15623:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2458,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15636:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2459,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1947,
                                                                    "src": "15636:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2455,
                                                                "name": "TransactionResult",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5648,
                                                                "src": "15605:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_event_nonpayable$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                }
                                                            },
                                                            "id": 2460,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "15605:59:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2461,
                                                        "nodeType": "EmitStatement",
                                                        "src": "15600:64:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "id": 2675,
                                    "nodeType": "Block",
                                    "src": "15686:2559:4",
                                    "statements": [
                                        {
                                            "condition": {
                                                "id": 2467,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "15700:13:4",
                                                "subExpression": {
                                                    "expression": {
                                                        "id": 2465,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "15701:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2466,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1939,
                                                    "src": "15701:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2533,
                                            "nodeType": "IfStatement",
                                            "src": "15696:1054:4",
                                            "trueBody": {
                                                "id": 2532,
                                                "nodeType": "Block",
                                                "src": "15715:1035:4",
                                                "statements": [
                                                    {
                                                        "condition": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 2497,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                },
                                                                "id": 2472,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "id": 2468,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "15786:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2469,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "15786:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "==",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2470,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "15801:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2471,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5663,
                                                                    "src": "15801:36:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                "src": "15786:51:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "||",
                                                            "rightExpression": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                "id": 2496,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "components": [
                                                                        {
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            },
                                                                            "id": 2482,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "expression": {
                                                                                    "id": 2473,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "15862:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2474,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1955,
                                                                                "src": "15862:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "<=",
                                                                            "rightExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                "id": 2481,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "expression": {
                                                                                            "id": 2475,
                                                                                            "name": "vars",
                                                                                            "nodeType": "Identifier",
                                                                                            "overloadedDeclarations": [],
                                                                                            "referencedDeclaration": 2003,
                                                                                            "src": "15883:4:4",
                                                                                            "typeDescriptions": {
                                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                                            }
                                                                                        },
                                                                                        "id": 2476,
                                                                                        "isConstant": false,
                                                                                        "isLValue": true,
                                                                                        "isPure": false,
                                                                                        "lValueRequested": false,
                                                                                        "memberName": "gasAndDataLimits",
                                                                                        "nodeType": "MemberAccess",
                                                                                        "referencedDeclaration": 1950,
                                                                                        "src": "15883:21:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_memory_ptr",
                                                                                            "typeString": "struct IPaymaster.GasAndDataLimits memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2477,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "acceptanceBudget",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5384,
                                                                                    "src": "15883:38:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_uint256",
                                                                                        "typeString": "uint256"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "+",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "expression": {
                                                                                            "id": 2478,
                                                                                            "name": "relayRequest",
                                                                                            "nodeType": "Identifier",
                                                                                            "overloadedDeclarations": [],
                                                                                            "referencedDeclaration": 1984,
                                                                                            "src": "15924:12:4",
                                                                                            "typeDescriptions": {
                                                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                            }
                                                                                        },
                                                                                        "id": 2479,
                                                                                        "isConstant": false,
                                                                                        "isLValue": false,
                                                                                        "isPure": false,
                                                                                        "lValueRequested": false,
                                                                                        "memberName": "relayData",
                                                                                        "nodeType": "MemberAccess",
                                                                                        "referencedDeclaration": 8490,
                                                                                        "src": "15924:22:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2480,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "transactionCalldataGasUsed",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8473,
                                                                                    "src": "15924:49:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_uint256",
                                                                                        "typeString": "uint256"
                                                                                    }
                                                                                },
                                                                                "src": "15883:90:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "src": "15862:111:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 2483,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "15861:113:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "&&",
                                                                "rightExpression": {
                                                                    "components": [
                                                                        {
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "id": 2494,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 2488,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "id": 2484,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 2003,
                                                                                        "src": "16000:4:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2485,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1953,
                                                                                    "src": "16000:11:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "id": 2486,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 5668,
                                                                                        "src": "16015:15:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 2487,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByForwarder",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5664,
                                                                                    "src": "16015:35:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "16000:50:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "||",
                                                                            "rightExpression": {
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 2493,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "expression": {
                                                                                        "id": 2489,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 2003,
                                                                                        "src": "16074:4:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 2490,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1953,
                                                                                    "src": "16074:11:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "expression": {
                                                                                        "id": 2491,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 5668,
                                                                                        "src": "16089:15:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 2492,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByRecipientRevert",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 5665,
                                                                                    "src": "16089:41:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "16074:56:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "src": "16000:130:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        }
                                                                    ],
                                                                    "id": 2495,
                                                                    "isConstant": false,
                                                                    "isInlineArray": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "TupleExpression",
                                                                    "src": "15978:225:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    }
                                                                },
                                                                "src": "15861:342:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "15786:417:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "id": 2531,
                                                        "nodeType": "IfStatement",
                                                        "src": "15782:958:4",
                                                        "trueBody": {
                                                            "id": 2530,
                                                            "nodeType": "Block",
                                                            "src": "16205:535:4",
                                                            "statements": [
                                                                {
                                                                    "eventCall": {
                                                                        "arguments": [
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2499,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16280:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2500,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayManager",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1969,
                                                                                "src": "16280:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2501,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16319:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2502,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "relayData",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8490,
                                                                                    "src": "16319:22:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2503,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "paymaster",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 8477,
                                                                                "src": "16319:32:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2504,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16373:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2505,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayRequestId",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1971,
                                                                                "src": "16373:19:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes32",
                                                                                    "typeString": "bytes32"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2506,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16414:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2507,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8487,
                                                                                    "src": "16414:20:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2508,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "from",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 5045,
                                                                                "src": "16414:25:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "expression": {
                                                                                        "id": 2509,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1984,
                                                                                        "src": "16461:12:4",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 2510,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 8487,
                                                                                    "src": "16461:20:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 2511,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "to",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 5047,
                                                                                "src": "16461:23:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2512,
                                                                                    "name": "msg",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 4294967281,
                                                                                    "src": "16506:3:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_magic_message",
                                                                                        "typeString": "msg"
                                                                                    }
                                                                                },
                                                                                "id": 2513,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "sender",
                                                                                "nodeType": "MemberAccess",
                                                                                "src": "16506:10:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2514,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16538:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2515,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "functionSelector",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1941,
                                                                                "src": "16538:21:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2516,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16581:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2517,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1955,
                                                                                "src": "16581:17:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2518,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16620:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2519,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1947,
                                                                                "src": "16620:27:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes32",
                                                                                    "typeString": "bytes32"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            ],
                                                                            "id": 2498,
                                                                            "name": "TransactionRejectedByPaymaster",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 5618,
                                                                            "src": "16228:30:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                                                                "typeString": "function (address,address,bytes32,address,address,address,bytes4,uint256,bytes memory)"
                                                                            }
                                                                        },
                                                                        "id": 2520,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "16228:420:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$__$",
                                                                            "typeString": "tuple()"
                                                                        }
                                                                    },
                                                                    "id": 2521,
                                                                    "nodeType": "EmitStatement",
                                                                    "src": "16223:425:4"
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "components": [
                                                                            {
                                                                                "hexValue": "66616c7365",
                                                                                "id": 2522,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "bool",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "16674:5:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                },
                                                                                "value": "false"
                                                                            },
                                                                            {
                                                                                "hexValue": "30",
                                                                                "id": 2523,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "number",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "16681:1:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                },
                                                                                "value": "0"
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2524,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16684:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2525,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "status",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1953,
                                                                                "src": "16684:11:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            {
                                                                                "expression": {
                                                                                    "id": 2526,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 2003,
                                                                                    "src": "16697:4:4",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 2527,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1947,
                                                                                "src": "16697:27:4",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "id": 2528,
                                                                        "isConstant": false,
                                                                        "isInlineArray": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "nodeType": "TupleExpression",
                                                                        "src": "16673:52:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "tuple(bool,int_const 0,enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                        }
                                                                    },
                                                                    "functionReturnParameters": 2000,
                                                                    "id": 2529,
                                                                    "nodeType": "Return",
                                                                    "src": "16666:59:4"
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "id": 2550,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2534,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "16848:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2536,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1963,
                                                    "src": "16848:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2549,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 2546,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2537,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "16863:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2538,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "16863:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2539,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "transactionCalldataGasUsed",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8473,
                                                            "src": "16863:49:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "components": [
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    },
                                                                    "id": 2544,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 2540,
                                                                            "name": "vars",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 2003,
                                                                            "src": "16916:4:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                                            }
                                                                        },
                                                                        "id": 2541,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "initialGasLeft",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 1943,
                                                                        "src": "16916:19:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "-",
                                                                    "rightExpression": {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 2542,
                                                                            "name": "aggregateGasleft",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3329,
                                                                            "src": "16938:16:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                                "typeString": "function () view returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 2543,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "16938:18:4",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "src": "16916:40:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2545,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "16915:42:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "16863:94:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2547,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "16960:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 2548,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasOverhead",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5545,
                                                        "src": "16960:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "16863:115:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "16848:130:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2551,
                                            "nodeType": "ExpressionStatement",
                                            "src": "16848:130:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2559,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "id": 2552,
                                                    "name": "charge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1994,
                                                    "src": "16988:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2554,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "17013:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2555,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "gasUsed",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1963,
                                                            "src": "17013:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2556,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17027:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2557,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17027:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        ],
                                                        "id": 2553,
                                                        "name": "calculateCharge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3073,
                                                        "src": "16997:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2558,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "16997:53:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "16988:62:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2560,
                                            "nodeType": "ExpressionStatement",
                                            "src": "16988:62:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2567,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "expression": {
                                                        "id": 2561,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "17060:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2563,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "devCharge",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1965,
                                                    "src": "17060:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2565,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1994,
                                                            "src": "17096:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "id": 2564,
                                                        "name": "calculateDevCharge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3007,
                                                        "src": "17077:18:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256) view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 2566,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "17077:26:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17060:43:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2568,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17060:43:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2581,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "baseExpression": {
                                                        "id": 2569,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "17114:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2573,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2570,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17123:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2571,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17123:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 2572,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "17123:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17114:42:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2580,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 2574,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "17159:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 2578,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2575,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1984,
                                                                    "src": "17168:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2576,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "17168:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2577,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8477,
                                                            "src": "17168:32:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17159:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "id": 2579,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1994,
                                                        "src": "17204:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17159:51:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17114:96:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2582,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17114:96:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2597,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "baseExpression": {
                                                        "id": 2583,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1350,
                                                        "src": "17220:8:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 2586,
                                                    "indexExpression": {
                                                        "expression": {
                                                            "id": 2584,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "17229:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2585,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayManager",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1969,
                                                        "src": "17229:17:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "17220:27:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2596,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "baseExpression": {
                                                            "id": 2587,
                                                            "name": "balances",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1350,
                                                            "src": "17250:8:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 2590,
                                                        "indexExpression": {
                                                            "expression": {
                                                                "id": 2588,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2003,
                                                                "src": "17259:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2589,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayManager",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1969,
                                                            "src": "17259:17:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "17250:27:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "components": [
                                                            {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2594,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "id": 2591,
                                                                    "name": "charge",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1994,
                                                                    "src": "17281:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2592,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "17290:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2593,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devCharge",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1965,
                                                                    "src": "17290:14:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "17281:23:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 2595,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "17280:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "17250:55:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "17220:85:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2598,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17220:85:4"
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2602,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2599,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2003,
                                                        "src": "17319:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2600,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devCharge",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1965,
                                                    "src": "17319:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 2601,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17336:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "17319:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2617,
                                            "nodeType": "IfStatement",
                                            "src": "17315:167:4",
                                            "trueBody": {
                                                "id": 2616,
                                                "nodeType": "Block",
                                                "src": "17339:143:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "id": 2614,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftHandSide": {
                                                                "baseExpression": {
                                                                    "id": 2603,
                                                                    "name": "balances",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1350,
                                                                    "src": "17397:8:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                        "typeString": "mapping(address => uint256)"
                                                                    }
                                                                },
                                                                "id": 2606,
                                                                "indexExpression": {
                                                                    "expression": {
                                                                        "id": 2604,
                                                                        "name": "config",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1236,
                                                                        "src": "17406:6:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                        }
                                                                    },
                                                                    "id": 2605,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devAddress",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5549,
                                                                    "src": "17406:17:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": true,
                                                                "nodeType": "IndexAccess",
                                                                "src": "17397:27:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "Assignment",
                                                            "operator": "=",
                                                            "rightHandSide": {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2613,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "baseExpression": {
                                                                        "id": 2607,
                                                                        "name": "balances",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1350,
                                                                        "src": "17427:8:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                            "typeString": "mapping(address => uint256)"
                                                                        }
                                                                    },
                                                                    "id": 2610,
                                                                    "indexExpression": {
                                                                        "expression": {
                                                                            "id": 2608,
                                                                            "name": "config",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1236,
                                                                            "src": "17436:6:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                            }
                                                                        },
                                                                        "id": 2609,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "devAddress",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5549,
                                                                        "src": "17436:17:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_address",
                                                                            "typeString": "address"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "17427:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "+",
                                                                "rightExpression": {
                                                                    "expression": {
                                                                        "id": 2611,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "17457:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2612,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "devCharge",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1965,
                                                                    "src": "17457:14:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "17427:44:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "17397:74:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 2615,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "17397:74:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "id": 2653,
                                            "nodeType": "Block",
                                            "src": "17492:480:4",
                                            "statements": [
                                                {
                                                    "assignments": [
                                                        2619
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2619,
                                                            "mutability": "mutable",
                                                            "name": "from",
                                                            "nameLocation": "17514:4:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17506:12:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2618,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17506:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2623,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2620,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17521:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2621,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "17521:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2622,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5045,
                                                        "src": "17521:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17506:40:4"
                                                },
                                                {
                                                    "assignments": [
                                                        2625
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2625,
                                                            "mutability": "mutable",
                                                            "name": "to",
                                                            "nameLocation": "17568:2:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17560:10:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2624,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17560:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2629,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2626,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17573:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2627,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8487,
                                                            "src": "17573:20:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$5058_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 2628,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5047,
                                                        "src": "17573:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17560:36:4"
                                                },
                                                {
                                                    "assignments": [
                                                        2631
                                                    ],
                                                    "declarations": [
                                                        {
                                                            "constant": false,
                                                            "id": 2631,
                                                            "mutability": "mutable",
                                                            "name": "paymaster",
                                                            "nameLocation": "17618:9:4",
                                                            "nodeType": "VariableDeclaration",
                                                            "scope": 2653,
                                                            "src": "17610:17:4",
                                                            "stateVariable": false,
                                                            "storageLocation": "default",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "typeName": {
                                                                "id": 2630,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "17610:7:4",
                                                                "stateMutability": "nonpayable",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "visibility": "internal"
                                                        }
                                                    ],
                                                    "id": 2635,
                                                    "initialValue": {
                                                        "expression": {
                                                            "expression": {
                                                                "id": 2632,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1984,
                                                                "src": "17630:12:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 2633,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8490,
                                                            "src": "17630:22:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 2634,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8477,
                                                        "src": "17630:32:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "17610:52:4"
                                                },
                                                {
                                                    "eventCall": {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 2637,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17717:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2638,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayManager",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1969,
                                                                "src": "17717:17:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2639,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 4294967281,
                                                                    "src": "17752:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 2640,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "17752:10:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2641,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17780:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2642,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayRequestId",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1971,
                                                                "src": "17780:19:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                }
                                                            },
                                                            {
                                                                "id": 2643,
                                                                "name": "from",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2619,
                                                                "src": "17817:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "id": 2644,
                                                                "name": "to",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2625,
                                                                "src": "17839:2:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "id": 2645,
                                                                "name": "paymaster",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2631,
                                                                "src": "17859:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2646,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17886:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2647,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "functionSelector",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1941,
                                                                "src": "17886:21:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            },
                                                            {
                                                                "expression": {
                                                                    "id": 2648,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2003,
                                                                    "src": "17925:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 2649,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "status",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1953,
                                                                "src": "17925:11:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                }
                                                            },
                                                            {
                                                                "id": 2650,
                                                                "name": "charge",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1994,
                                                                "src": "17954:6:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "id": 2636,
                                                            "name": "TransactionRelayed",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5640,
                                                            "src": "17681:18:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_enum$_RelayCallStatus_$5668_$_t_uint256_$returns$__$",
                                                                "typeString": "function (address,address,bytes32,address,address,address,bytes4,enum IRelayHub.RelayCallStatus,uint256)"
                                                            }
                                                        },
                                                        "id": 2651,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "17681:280:4",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_tuple$__$",
                                                            "typeString": "tuple()"
                                                        }
                                                    },
                                                    "id": 2652,
                                                    "nodeType": "EmitStatement",
                                                    "src": "17676:285:4"
                                                }
                                            ]
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2657,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2654,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967270,
                                                        "src": "18073:2:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 2655,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "origin",
                                                    "nodeType": "MemberAccess",
                                                    "src": "18073:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 2656,
                                                    "name": "DRY_RUN_ADDRESS",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1214,
                                                    "src": "18086:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "18073:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2667,
                                            "nodeType": "IfStatement",
                                            "src": "18069:122:4",
                                            "trueBody": {
                                                "id": 2666,
                                                "nodeType": "Block",
                                                "src": "18103:88:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "components": [
                                                                {
                                                                    "hexValue": "74727565",
                                                                    "id": 2658,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "bool",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "18125:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bool",
                                                                        "typeString": "bool"
                                                                    },
                                                                    "value": "true"
                                                                },
                                                                {
                                                                    "id": 2659,
                                                                    "name": "charge",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1994,
                                                                    "src": "18131:6:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2660,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "18139:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2661,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1953,
                                                                    "src": "18139:11:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2662,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2003,
                                                                        "src": "18152:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2663,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1947,
                                                                    "src": "18152:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2664,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "18124:56:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                                                "typeString": "tuple(bool,uint256,enum IRelayHub.RelayCallStatus,bytes memory)"
                                                            }
                                                        },
                                                        "functionReturnParameters": 2000,
                                                        "id": 2665,
                                                        "nodeType": "Return",
                                                        "src": "18117:63:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "components": [
                                                    {
                                                        "hexValue": "74727565",
                                                        "id": 2668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "bool",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "18208:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "value": "true"
                                                    },
                                                    {
                                                        "id": 2669,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1994,
                                                        "src": "18214:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "expression": {
                                                            "id": 2670,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2003,
                                                            "src": "18222:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1976_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2671,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "status",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1953,
                                                        "src": "18222:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "",
                                                        "id": 2672,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "18235:2:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                            "typeString": "literal_string \"\""
                                                        },
                                                        "value": ""
                                                    }
                                                ],
                                                "id": 2673,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "18207:31:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_enum$_RelayCallStatus_$5668_$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$",
                                                    "typeString": "tuple(bool,uint256,enum IRelayHub.RelayCallStatus,literal_string \"\")"
                                                }
                                            },
                                            "functionReturnParameters": 2000,
                                            "id": 2674,
                                            "nodeType": "Return",
                                            "src": "18200:38:4"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1977,
                            "nodeType": "StructuredDocumentation",
                            "src": "9808:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "6ca862e2",
                        "id": 2677,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nameLocation": "9847:9:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1990,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "10086:8:4"
                        },
                        "parameters": {
                            "id": 1989,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1979,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "9882:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9866:35:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 1978,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9866:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1981,
                                    "mutability": "mutable",
                                    "name": "maxAcceptanceBudget",
                                    "nameLocation": "9919:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9911:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1980,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9911:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1984,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "9979:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "9948:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 1983,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1982,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "9948:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "9948:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1986,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "10016:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10001:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1985,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10001:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1988,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "10050:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10035:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1987,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10035:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9856:212:4"
                        },
                        "returnParameters": {
                            "id": 2000,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1992,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nameLocation": "10122:17:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10117:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1991,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10117:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1994,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "10157:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10149:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1993,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10149:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1997,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "10199:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10173:32:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 1996,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 1995,
                                            "name": "IRelayHub.RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "10173:25:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "10173:25:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1999,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nameLocation": "10228:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2677,
                                    "src": "10215:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1998,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10215:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10107:133:4"
                        },
                        "scope": 3330,
                        "src": "9838:8413:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "canonicalName": "RelayHub.InnerRelayCallData",
                        "id": 2696,
                        "members": [
                            {
                                "constant": false,
                                "id": 2679,
                                "mutability": "mutable",
                                "name": "initialGasLeft",
                                "nameLocation": "18301:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18293:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2678,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18293:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2681,
                                "mutability": "mutable",
                                "name": "gasUsedToCallInner",
                                "nameLocation": "18333:18:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18325:26:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2680,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18325:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2683,
                                "mutability": "mutable",
                                "name": "balanceBefore",
                                "nameLocation": "18369:13:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18361:21:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 2682,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18361:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2685,
                                "mutability": "mutable",
                                "name": "preReturnValue",
                                "nameLocation": "18400:14:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18392:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 2684,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18392:7:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2687,
                                "mutability": "mutable",
                                "name": "relayedCallSuccess",
                                "nameLocation": "18429:18:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18424:23:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 2686,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18424:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2689,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nameLocation": "18463:22:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18457:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2688,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18457:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2691,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nameLocation": "18501:16:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18495:22:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2690,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18495:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2693,
                                "mutability": "mutable",
                                "name": "data",
                                "nameLocation": "18533:4:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18527:10:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 2692,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18527:5:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 2695,
                                "mutability": "mutable",
                                "name": "rejectOnRecipientRevert",
                                "nameLocation": "18552:23:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 2696,
                                "src": "18547:28:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 2694,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18547:4:4",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "InnerRelayCallData",
                        "nameLocation": "18264:18:4",
                        "nodeType": "StructDefinition",
                        "scope": 3330,
                        "src": "18257:325:4",
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 2955,
                            "nodeType": "Block",
                            "src": "19141:3786:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2723
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2723,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nameLocation": "19177:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2955,
                                            "src": "19151:30:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                "typeString": "struct RelayHub.InnerRelayCallData"
                                            },
                                            "typeName": {
                                                "id": 2722,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 2721,
                                                    "name": "InnerRelayCallData",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 2696,
                                                    "src": "19151:18:4"
                                                },
                                                "referencedDeclaration": 2696,
                                                "src": "19151:18:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_storage_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2724,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "19151:30:4"
                                },
                                {
                                    "expression": {
                                        "id": 2730,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2725,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "19191:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2727,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "initialGasLeft",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2679,
                                            "src": "19191:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 2728,
                                                "name": "aggregateGasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3329,
                                                "src": "19213:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 2729,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "19213:18:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "19191:40:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2731,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19191:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 2739,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2732,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "19241:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2734,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "gasUsedToCallInner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2681,
                                            "src": "19241:23:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 2738,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 2735,
                                                "name": "totalInitialGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2711,
                                                "src": "19267:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 2736,
                                                    "name": "gasleft",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967289,
                                                    "src": "19285:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 2737,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "19285:9:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "19267:27:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "19241:53:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2740,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19241:53:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 2748,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2742,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "19722:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2743,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "19722:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 2746,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967268,
                                                            "src": "19744:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_RelayHub_$3330",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        ],
                                                        "id": 2745,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "19736:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 2744,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "19736:7:4",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 2747,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "19736:13:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "19722:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4d7573742062652063616c6c65642062792052656c6179487562",
                                                "id": 2749,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "19751:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_357649a60de2e9c2a59a14b958d360a6a42d357567b87c3fe1a024ac8c9ded0d",
                                                    "typeString": "literal_string \"Must be called by RelayHub\""
                                                },
                                                "value": "Must be called by RelayHub"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_357649a60de2e9c2a59a14b958d360a6a42d357567b87c3fe1a024ac8c9ded0d",
                                                    "typeString": "literal_string \"Must be called by RelayHub\""
                                                }
                                            ],
                                            "id": 2741,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "19714:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2750,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "19714:66:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2751,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19714:66:4"
                                },
                                {
                                    "expression": {
                                        "id": 2760,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2752,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "20179:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2754,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2683,
                                            "src": "20179:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "baseExpression": {
                                                "id": 2755,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "20200:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2759,
                                            "indexExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2756,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "20209:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2757,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "20209:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2758,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "20209:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "20200:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "20179:63:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2761,
                                    "nodeType": "ExpressionStatement",
                                    "src": "20179:63:4"
                                },
                                {
                                    "expression": {
                                        "id": 2775,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2762,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "20372:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2764,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2693,
                                            "src": "20372:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2767,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "20420:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 2768,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "preRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5427,
                                                        "src": "20420:25:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bool_$",
                                                            "typeString": "function IPaymaster.preRelayedCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bytes memory,bool)"
                                                        }
                                                    },
                                                    "id": 2769,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "20420:34:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "id": 2770,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2702,
                                                    "src": "20468:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2771,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2704,
                                                    "src": "20482:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2772,
                                                    "name": "approvalData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2706,
                                                    "src": "20493:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "id": 2773,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2713,
                                                    "src": "20507:14:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2765,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967295,
                                                    "src": "20384:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 2766,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "src": "20384:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 2774,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "20384:147:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "20372:159:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 2776,
                                    "nodeType": "ExpressionStatement",
                                    "src": "20372:159:4"
                                },
                                {
                                    "id": 2831,
                                    "nodeType": "Block",
                                    "src": "20541:484:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2778
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2778,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nameLocation": "20560:7:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2831,
                                                    "src": "20555:12:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2777,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "20555:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2779,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "20555:12:4"
                                        },
                                        {
                                            "assignments": [
                                                2781
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2781,
                                                    "mutability": "mutable",
                                                    "name": "retData",
                                                    "nameLocation": "20594:7:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2831,
                                                    "src": "20581:20:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 2780,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "20581:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2782,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "20581:20:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2796,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "id": 2783,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2778,
                                                            "src": "20616:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "id": 2784,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2781,
                                                            "src": "20625:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2785,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "20615:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2793,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20719:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2794,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2693,
                                                            "src": "20719:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                    "typeString": "bytes memory"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "expression": {
                                                                    "expression": {
                                                                        "id": 2786,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2702,
                                                                        "src": "20636:12:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 2787,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 8490,
                                                                    "src": "20636:22:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 2788,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8477,
                                                                "src": "20636:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 2789,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "src": "20636:37:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 2792,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "expression": {
                                                                    "id": 2790,
                                                                    "name": "gasAndDataLimits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2709,
                                                                    "src": "20678:16:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                                                        "typeString": "struct IPaymaster.GasAndDataLimits calldata"
                                                                    }
                                                                },
                                                                "id": 2791,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "preRelayedCallGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5386,
                                                                "src": "20678:39:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "20636:82:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2795,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "20636:93:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "20615:114:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2797,
                                            "nodeType": "ExpressionStatement",
                                            "src": "20615:114:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2799,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "20747:8:4",
                                                "subExpression": {
                                                    "id": 2798,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2778,
                                                    "src": "20748:7:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2813,
                                            "nodeType": "IfStatement",
                                            "src": "20743:169:4",
                                            "trueBody": {
                                                "id": 2812,
                                                "nodeType": "Block",
                                                "src": "20757:155:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "id": 2803,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2781,
                                                                    "src": "20808:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "id": 2800,
                                                                    "name": "GsnEip712Library",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 8464,
                                                                    "src": "20775:16:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                                        "typeString": "type(library GsnEip712Library)"
                                                                    }
                                                                },
                                                                "id": 2802,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "truncateInPlace",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8368,
                                                                "src": "20775:32:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2804,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "20775:41:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2805,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "20775:41:4"
                                                    },
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2807,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "20851:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2808,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5663,
                                                                    "src": "20851:36:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2809,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2781,
                                                                    "src": "20889:7:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2806,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "20834:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2810,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "20834:63:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2811,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "20834:63:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "id": 2829,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "expression": {
                                                                "id": 2814,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20926:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2816,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "recipientContext",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2691,
                                                            "src": "20926:21:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2817,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "20949:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2818,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "rejectOnRecipientRevert",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2695,
                                                            "src": "20949:28:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2819,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "20925:53:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2822,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2781,
                                                            "src": "20992:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "components": [
                                                                {
                                                                    "id": 2824,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "21002:5:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2823,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "21002:5:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2826,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "21008:4:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 2825,
                                                                        "name": "bool",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "21008:4:4",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                }
                                                            ],
                                                            "id": 2827,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "21001:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2820,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967295,
                                                            "src": "20981:3:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 2821,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "src": "20981:10:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 2828,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "20981:33:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "src": "20925:89:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2830,
                                            "nodeType": "ExpressionStatement",
                                            "src": "20925:89:4"
                                        }
                                    ]
                                },
                                {
                                    "id": 2875,
                                    "nodeType": "Block",
                                    "src": "21156:619:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2833
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2833,
                                                    "mutability": "mutable",
                                                    "name": "forwarderSuccess",
                                                    "nameLocation": "21175:16:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2875,
                                                    "src": "21170:21:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2832,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "21170:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2834,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "21170:21:4"
                                        },
                                        {
                                            "expression": {
                                                "id": 2847,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "components": [
                                                        {
                                                            "id": 2835,
                                                            "name": "forwarderSuccess",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2833,
                                                            "src": "21206:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2836,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "21224:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2837,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallSuccess",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2687,
                                                            "src": "21224:23:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 2838,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2723,
                                                                "src": "21249:4:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 2839,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 2689,
                                                            "src": "21249:27:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 2840,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "21205:72:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "arguments": [
                                                        {
                                                            "id": 2843,
                                                            "name": "domainSeparatorName",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2699,
                                                            "src": "21305:19:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_string_calldata_ptr",
                                                                "typeString": "string calldata"
                                                            }
                                                        },
                                                        {
                                                            "id": 2844,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2702,
                                                            "src": "21326:12:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        {
                                                            "id": 2845,
                                                            "name": "signature",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2704,
                                                            "src": "21340:9:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_string_calldata_ptr",
                                                                "typeString": "string calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "id": 2841,
                                                            "name": "GsnEip712Library",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 8464,
                                                            "src": "21280:16:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                                "typeString": "type(library GsnEip712Library)"
                                                            }
                                                        },
                                                        "id": 2842,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "execute",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 8355,
                                                        "src": "21280:24:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_struct$_RelayRequest_$8491_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (string memory,struct GsnTypes.RelayRequest calldata,bytes calldata) returns (bool,bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2846,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "21280:70:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "src": "21205:145:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 2848,
                                            "nodeType": "ExpressionStatement",
                                            "src": "21205:145:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2850,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "21369:17:4",
                                                "subExpression": {
                                                    "id": 2849,
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2833,
                                                    "src": "21370:16:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2859,
                                            "nodeType": "IfStatement",
                                            "src": "21364:140:4",
                                            "trueBody": {
                                                "id": 2858,
                                                "nodeType": "Block",
                                                "src": "21389:115:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2852,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "21424:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2853,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByForwarder",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5664,
                                                                    "src": "21424:35:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2854,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "21461:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2855,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2689,
                                                                    "src": "21461:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2851,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "21407:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2856,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "21407:82:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2857,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "21407:82:4"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 2865,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 2860,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "21522:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2861,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "rejectOnRecipientRevert",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2695,
                                                    "src": "21522:28:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "id": 2864,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "21554:24:4",
                                                    "subExpression": {
                                                        "expression": {
                                                            "id": 2862,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "21555:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2863,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallSuccess",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2687,
                                                        "src": "21555:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "21522:56:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2874,
                                            "nodeType": "IfStatement",
                                            "src": "21518:247:4",
                                            "trueBody": {
                                                "id": 2873,
                                                "nodeType": "Block",
                                                "src": "21580:185:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2867,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "21679:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2868,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByRecipientRevert",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5665,
                                                                    "src": "21679:41:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "id": 2869,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "21722:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2870,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2689,
                                                                    "src": "21722:27:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2866,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "21662:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2871,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "21662:88:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2872,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "21662:88:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "id": 2900,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "expression": {
                                                "id": 2876,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "22037:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2878,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2693,
                                            "src": "22037:9:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "expression": {
                                                        "expression": {
                                                            "id": 2881,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5447,
                                                            "src": "22085:10:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$5447_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 2882,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "postRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5440,
                                                        "src": "22085:26:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$8484_calldata_ptr_$returns$__$",
                                                            "typeString": "function IPaymaster.postRelayedCall(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                                        }
                                                    },
                                                    "id": 2883,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "src": "22085:35:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2884,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22134:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2885,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "recipientContext",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2691,
                                                    "src": "22134:21:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2886,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22169:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2887,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2687,
                                                    "src": "22169:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 2896,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "expression": {
                                                            "id": 2888,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "22206:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2889,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasUsedToCallInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2681,
                                                        "src": "22206:23:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "components": [
                                                            {
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 2894,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "expression": {
                                                                        "id": 2890,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 2723,
                                                                        "src": "22233:4:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 2891,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "initialGasLeft",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 2679,
                                                                    "src": "22233:19:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "arguments": [],
                                                                    "expression": {
                                                                        "argumentTypes": [],
                                                                        "id": 2892,
                                                                        "name": "aggregateGasleft",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3329,
                                                                        "src": "22255:16:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                                            "typeString": "function () view returns (uint256)"
                                                                        }
                                                                    },
                                                                    "id": 2893,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "22255:18:4",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "22233:40:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 2895,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "22232:42:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "22206:68:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "expression": {
                                                        "id": 2897,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "22310:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2898,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "22310:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 2879,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967295,
                                                    "src": "22049:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 2880,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "src": "22049:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 2899,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "22049:293:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "22037:305:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 2901,
                                    "nodeType": "ExpressionStatement",
                                    "src": "22037:305:4"
                                },
                                {
                                    "id": 2927,
                                    "nodeType": "Block",
                                    "src": "22353:274:4",
                                    "statements": [
                                        {
                                            "assignments": [
                                                2903,
                                                2905
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 2903,
                                                    "mutability": "mutable",
                                                    "name": "successPost",
                                                    "nameLocation": "22369:11:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2927,
                                                    "src": "22364:16:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 2902,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "22364:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 2905,
                                                    "mutability": "mutable",
                                                    "name": "ret",
                                                    "nameLocation": "22394:3:4",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 2927,
                                                    "src": "22381:16:4",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 2904,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "22381:5:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 2916,
                                            "initialValue": {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 2913,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2723,
                                                            "src": "22485:4:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 2914,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2693,
                                                        "src": "22485:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "expression": {
                                                                "expression": {
                                                                    "id": 2906,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2702,
                                                                    "src": "22401:12:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 2907,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 8490,
                                                                "src": "22401:22:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 2908,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8477,
                                                            "src": "22401:32:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 2909,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "src": "22401:37:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 2912,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "expression": {
                                                                "id": 2910,
                                                                "name": "gasAndDataLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2709,
                                                                "src": "22443:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                                                    "typeString": "struct IPaymaster.GasAndDataLimits calldata"
                                                                }
                                                            },
                                                            "id": 2911,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5388,
                                                            "src": "22443:40:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "22401:83:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 2915,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "22401:94:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "22363:132:4"
                                        },
                                        {
                                            "condition": {
                                                "id": 2918,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "22514:12:4",
                                                "subExpression": {
                                                    "id": 2917,
                                                    "name": "successPost",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2903,
                                                    "src": "22515:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 2926,
                                            "nodeType": "IfStatement",
                                            "src": "22510:107:4",
                                            "trueBody": {
                                                "id": 2925,
                                                "nodeType": "Block",
                                                "src": "22528:89:4",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "expression": {
                                                                        "id": 2920,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 5668,
                                                                        "src": "22563:15:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 2921,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "PostRelayedFailed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 5666,
                                                                    "src": "22563:33:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "id": 2922,
                                                                    "name": "ret",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 2905,
                                                                    "src": "22598:3:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 2919,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 2981,
                                                                "src": "22546:16:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 2923,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "22546:56:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 2924,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "22546:56:4"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "baseExpression": {
                                                "id": 2928,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "22641:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 2932,
                                            "indexExpression": {
                                                "expression": {
                                                    "expression": {
                                                        "id": 2929,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2702,
                                                        "src": "22650:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 2930,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 8490,
                                                    "src": "22650:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 2931,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8477,
                                                "src": "22650:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22641:42:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 2933,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2723,
                                                "src": "22686:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 2934,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2683,
                                            "src": "22686:18:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "22641:63:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2943,
                                    "nodeType": "IfStatement",
                                    "src": "22637:155:4",
                                    "trueBody": {
                                        "id": 2942,
                                        "nodeType": "Block",
                                        "src": "22706:86:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "expression": {
                                                                "id": 2937,
                                                                "name": "RelayCallStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5668,
                                                                "src": "22737:15:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                                    "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                }
                                                            },
                                                            "id": 2938,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "PaymasterBalanceChanged",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 5667,
                                                            "src": "22737:39:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "",
                                                            "id": 2939,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "22778:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "id": 2936,
                                                        "name": "revertWithStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2981,
                                                        "src": "22720:16:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                        }
                                                    },
                                                    "id": 2940,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "22720:61:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 2941,
                                                "nodeType": "ExpressionStatement",
                                                "src": "22720:61:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "condition": {
                                                    "expression": {
                                                        "id": 2944,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2723,
                                                        "src": "22810:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 2945,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2687,
                                                    "src": "22810:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseExpression": {
                                                    "expression": {
                                                        "id": 2948,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5668,
                                                        "src": "22857:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 2949,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "RelayedCallFailed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5662,
                                                    "src": "22857:33:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "id": 2950,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "Conditional",
                                                "src": "22810:80:4",
                                                "trueExpression": {
                                                    "expression": {
                                                        "id": 2946,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5668,
                                                        "src": "22836:15:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$5668_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 2947,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "OK",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5661,
                                                    "src": "22836:18:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 2951,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2723,
                                                    "src": "22892:4:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_InnerRelayCallData_$2696_memory_ptr",
                                                        "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                    }
                                                },
                                                "id": 2952,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayedCallReturnValue",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 2689,
                                                "src": "22892:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 2953,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "22809:111:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$5668_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 2720,
                                    "id": 2954,
                                    "nodeType": "Return",
                                    "src": "22802:118:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2697,
                            "nodeType": "StructuredDocumentation",
                            "src": "18588:160:4",
                            "text": " @notice This method can only by called by this `RelayHub`.\n It wraps the execution of the `RelayRequest` in a revertable frame context."
                        },
                        "functionSelector": "a6e61b60",
                        "id": 2956,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "innerRelayCall",
                        "nameLocation": "18762:14:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2714,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2699,
                                    "mutability": "mutable",
                                    "name": "domainSeparatorName",
                                    "nameLocation": "18802:19:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18786:35:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 2698,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18786:6:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2702,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nameLocation": "18862:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18831:43:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$8491_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "id": 2701,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2700,
                                            "name": "GsnTypes.RelayRequest",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8491,
                                            "src": "18831:21:4"
                                        },
                                        "referencedDeclaration": 8491,
                                        "src": "18831:21:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$8491_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2704,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "18899:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18884:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2703,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18884:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2706,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nameLocation": "18933:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18918:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2705,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "18918:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2709,
                                    "mutability": "mutable",
                                    "name": "gasAndDataLimits",
                                    "nameLocation": "18992:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "18955:53:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_calldata_ptr",
                                        "typeString": "struct IPaymaster.GasAndDataLimits"
                                    },
                                    "typeName": {
                                        "id": 2708,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2707,
                                            "name": "IPaymaster.GasAndDataLimits",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5391,
                                            "src": "18955:27:4"
                                        },
                                        "referencedDeclaration": 5391,
                                        "src": "18955:27:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasAndDataLimits_$5391_storage_ptr",
                                            "typeString": "struct IPaymaster.GasAndDataLimits"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2711,
                                    "mutability": "mutable",
                                    "name": "totalInitialGas",
                                    "nameLocation": "19026:15:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19018:23:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2710,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19018:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2713,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nameLocation": "19059:14:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19051:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2712,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19051:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "18776:303:4"
                        },
                        "returnParameters": {
                            "id": 2720,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2717,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19106:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 2716,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2715,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "19106:15:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "19106:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2719,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2956,
                                    "src": "19123:12:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2718,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "19123:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "19105:31:4"
                        },
                        "scope": 3330,
                        "src": "18753:4174:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2980,
                            "nodeType": "Block",
                            "src": "23155:258:4",
                            "statements": [
                                {
                                    "assignments": [
                                        2966
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2966,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "nameLocation": "23178:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 2980,
                                            "src": "23165:17:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 2965,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "23165:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2972,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 2969,
                                                "name": "status",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2960,
                                                "src": "23196:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "id": 2970,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2962,
                                                "src": "23204:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2967,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "23185:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 2968,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "23185:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 2971,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23185:23:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "23165:43:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 2976,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2966,
                                                "src": "23251:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2973,
                                                "name": "GsnEip712Library",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8464,
                                                "src": "23218:16:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$8464_$",
                                                    "typeString": "type(library GsnEip712Library)"
                                                }
                                            },
                                            "id": 2975,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "truncateInPlace",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8368,
                                            "src": "23218:32:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) pure"
                                            }
                                        },
                                        "id": 2977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "23218:38:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2978,
                                    "nodeType": "ExpressionStatement",
                                    "src": "23218:38:4"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "23276:131:4",
                                        "statements": [
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "23290:27:4",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23312:4:4"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23306:5:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23306:11:4"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataSize",
                                                        "nodeType": "YulTypedName",
                                                        "src": "23294:8:4",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "23330:28:4",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23349:4:4"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "23355:2:4",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23345:3:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23345:13:4"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataPtr",
                                                        "nodeType": "YulTypedName",
                                                        "src": "23334:7:4",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "name": "dataPtr",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23379:7:4"
                                                        },
                                                        {
                                                            "name": "dataSize",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "23388:8:4"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "23372:6:4"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "23372:25:4"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "23372:25:4"
                                            }
                                        ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                        {
                                            "declaration": 2966,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "23312:4:4",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 2966,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "23349:4:4",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 2979,
                                    "nodeType": "InlineAssembly",
                                    "src": "23267:140:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2957,
                            "nodeType": "StructuredDocumentation",
                            "src": "22933:136:4",
                            "text": " @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)"
                        },
                        "id": 2981,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "revertWithStatus",
                        "nameLocation": "23083:16:4",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2963,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2960,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nameLocation": "23116:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2981,
                                    "src": "23100:22:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "id": 2959,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 2958,
                                            "name": "RelayCallStatus",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5668,
                                            "src": "23100:15:4"
                                        },
                                        "referencedDeclaration": 5668,
                                        "src": "23100:15:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$5668",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2962,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nameLocation": "23137:3:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2981,
                                    "src": "23124:16:4",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 2961,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23124:5:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23099:42:4"
                        },
                        "returnParameters": {
                            "id": 2964,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "23155:0:4"
                        },
                        "scope": 3330,
                        "src": "23074:339:4",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            5786
                        ],
                        "body": {
                            "id": 3006,
                            "nodeType": "Block",
                            "src": "23539:191:4",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        },
                                        "id": 2993,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 2990,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "23553:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            },
                                            "id": 2991,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "devFee",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5551,
                                            "src": "23553:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "hexValue": "30",
                                            "id": 2992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "23570:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "23553:18:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 2997,
                                    "nodeType": "IfStatement",
                                    "src": "23549:100:4",
                                    "trueBody": {
                                        "id": 2996,
                                        "nodeType": "Block",
                                        "src": "23572:77:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "hexValue": "30",
                                                    "id": 2994,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "23637:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "functionReturnParameters": 2989,
                                                "id": 2995,
                                                "nodeType": "Return",
                                                "src": "23630:8:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "id": 3005,
                                    "nodeType": "UncheckedBlock",
                                    "src": "23658:66:4",
                                    "statements": [
                                        {
                                            "expression": {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3003,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 3001,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 2998,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2984,
                                                        "src": "23685:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "*",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 2999,
                                                            "name": "config",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1236,
                                                            "src": "23694:6:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                            }
                                                        },
                                                        "id": 3000,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "devFee",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5551,
                                                        "src": "23694:13:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint8",
                                                            "typeString": "uint8"
                                                        }
                                                    },
                                                    "src": "23685:22:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "/",
                                                "rightExpression": {
                                                    "hexValue": "313030",
                                                    "id": 3002,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "23710:3:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_100_by_1",
                                                        "typeString": "int_const 100"
                                                    },
                                                    "value": "100"
                                                },
                                                "src": "23685:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "functionReturnParameters": 2989,
                                            "id": 3004,
                                            "nodeType": "Return",
                                            "src": "23678:35:4"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2982,
                            "nodeType": "StructuredDocumentation",
                            "src": "23419:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8ac3b845",
                        "id": 3007,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateDevCharge",
                        "nameLocation": "23458:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2986,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "23500:8:4"
                        },
                        "parameters": {
                            "id": 2985,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2984,
                                    "mutability": "mutable",
                                    "name": "charge",
                                    "nameLocation": "23485:6:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3007,
                                    "src": "23477:14:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2983,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23477:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23476:16:4"
                        },
                        "returnParameters": {
                            "id": 2989,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2988,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3007,
                                    "src": "23531:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2987,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23531:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23530:9:4"
                        },
                        "scope": 3330,
                        "src": "23449:281:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5778
                        ],
                        "body": {
                            "id": 3072,
                            "nodeType": "Block",
                            "src": "23894:433:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3020
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3020,
                                            "mutability": "mutable",
                                            "name": "basefee",
                                            "nameLocation": "23912:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3072,
                                            "src": "23904:15:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3019,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "23904:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3021,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "23904:15:4"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3026,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3022,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3013,
                                                "src": "23933:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            },
                                            "id": 3023,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maxFeePerGas",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8469,
                                            "src": "23933:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 3024,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3013,
                                                "src": "23959:9:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            },
                                            "id": 3025,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "maxPriorityFeePerGas",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 8471,
                                            "src": "23959:30:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "23933:56:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 3037,
                                        "nodeType": "Block",
                                        "src": "24033:48:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 3035,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 3032,
                                                        "name": "basefee",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3020,
                                                        "src": "24047:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "expression": {
                                                            "id": 3033,
                                                            "name": "block",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967292,
                                                            "src": "24057:5:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_block",
                                                                "typeString": "block"
                                                            }
                                                        },
                                                        "id": 3034,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "basefee",
                                                        "nodeType": "MemberAccess",
                                                        "src": "24057:13:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "24047:23:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 3036,
                                                "nodeType": "ExpressionStatement",
                                                "src": "24047:23:4"
                                            }
                                        ]
                                    },
                                    "id": 3038,
                                    "nodeType": "IfStatement",
                                    "src": "23929:152:4",
                                    "trueBody": {
                                        "id": 3031,
                                        "nodeType": "Block",
                                        "src": "23991:36:4",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 3029,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 3027,
                                                        "name": "basefee",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3020,
                                                        "src": "24005:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "hexValue": "30",
                                                        "id": 3028,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "24015:1:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    },
                                                    "src": "24005:11:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 3030,
                                                "nodeType": "ExpressionStatement",
                                                "src": "24005:11:4"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        3040
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3040,
                                            "mutability": "mutable",
                                            "name": "chargeableGasPrice",
                                            "nameLocation": "24098:18:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3072,
                                            "src": "24090:26:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3039,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24090:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3055,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 3043,
                                                    "name": "relayData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3013,
                                                    "src": "24128:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 3044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "maxFeePerGas",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 8469,
                                                "src": "24128:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "expression": {
                                                            "id": 3047,
                                                            "name": "tx",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 4294967270,
                                                            "src": "24161:2:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_transaction",
                                                                "typeString": "tx"
                                                            }
                                                        },
                                                        "id": 3048,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasprice",
                                                        "nodeType": "MemberAccess",
                                                        "src": "24161:11:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 3052,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 3049,
                                                            "name": "basefee",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3020,
                                                            "src": "24174:7:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 3050,
                                                                "name": "relayData",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3013,
                                                                "src": "24184:9:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 3051,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "maxPriorityFeePerGas",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 8471,
                                                            "src": "24184:30:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "24174:40:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 3045,
                                                        "name": "Math",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12856,
                                                        "src": "24152:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_Math_$12856_$",
                                                            "typeString": "type(library Math)"
                                                        }
                                                    },
                                                    "id": 3046,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "min",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 12395,
                                                    "src": "24152:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 3053,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "24152:63:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3041,
                                                "name": "Math",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12856,
                                                "src": "24119:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_Math_$12856_$",
                                                    "typeString": "type(library Math)"
                                                }
                                            },
                                            "id": 3042,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "min",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 12395,
                                            "src": "24119:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 3054,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24119:97:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24090:126:4"
                                },
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3070,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3056,
                                                "name": "config",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "24233:6:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                    "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                }
                                            },
                                            "id": 3057,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "baseRelayFee",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5553,
                                            "src": "24233:19:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint80",
                                                "typeString": "uint80"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3069,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "components": [
                                                    {
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 3066,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 3060,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "id": 3058,
                                                                "name": "gasUsed",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3010,
                                                                "src": "24256:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "*",
                                                            "rightExpression": {
                                                                "id": 3059,
                                                                "name": "chargeableGasPrice",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3040,
                                                                "src": "24266:18:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "24256:28:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "components": [
                                                                {
                                                                    "commonType": {
                                                                        "typeIdentifier": "t_uint16",
                                                                        "typeString": "uint16"
                                                                    },
                                                                    "id": 3064,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "leftExpression": {
                                                                        "expression": {
                                                                            "id": 3061,
                                                                            "name": "config",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1236,
                                                                            "src": "24288:6:4",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                                                "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                                            }
                                                                        },
                                                                        "id": 3062,
                                                                        "isConstant": false,
                                                                        "isLValue": true,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "memberName": "pctRelayFee",
                                                                        "nodeType": "MemberAccess",
                                                                        "referencedDeclaration": 5555,
                                                                        "src": "24288:18:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint16",
                                                                            "typeString": "uint16"
                                                                        }
                                                                    },
                                                                    "nodeType": "BinaryOperation",
                                                                    "operator": "+",
                                                                    "rightExpression": {
                                                                        "hexValue": "313030",
                                                                        "id": 3063,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "24309:3:4",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_rational_100_by_1",
                                                                            "typeString": "int_const 100"
                                                                        },
                                                                        "value": "100"
                                                                    },
                                                                    "src": "24288:24:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint16",
                                                                        "typeString": "uint16"
                                                                    }
                                                                }
                                                            ],
                                                            "id": 3065,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "24287:26:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint16",
                                                                "typeString": "uint16"
                                                            }
                                                        },
                                                        "src": "24256:57:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "id": 3067,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "24255:59:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "/",
                                            "rightExpression": {
                                                "hexValue": "313030",
                                                "id": 3068,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24317:3:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_100_by_1",
                                                    "typeString": "int_const 100"
                                                },
                                                "value": "100"
                                            },
                                            "src": "24255:65:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "24233:87:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3018,
                                    "id": 3071,
                                    "nodeType": "Return",
                                    "src": "24226:94:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3008,
                            "nodeType": "StructuredDocumentation",
                            "src": "23736:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "8e53548b",
                        "id": 3073,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nameLocation": "23775:15:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3015,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "23854:8:4"
                        },
                        "parameters": {
                            "id": 3014,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3010,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nameLocation": "23799:7:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23791:15:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3009,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23791:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3013,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nameLocation": "23836:9:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23808:37:4",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$8484_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "id": 3012,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 3011,
                                            "name": "GsnTypes.RelayData",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 8484,
                                            "src": "23808:18:4"
                                        },
                                        "referencedDeclaration": 8484,
                                        "src": "23808:18:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$8484_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23790:56:4"
                        },
                        "returnParameters": {
                            "id": 3018,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3017,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3073,
                                    "src": "23885:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3016,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "23885:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "23884:9:4"
                        },
                        "scope": 3330,
                        "src": "23766:561:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5857
                        ],
                        "body": {
                            "id": 3149,
                            "nodeType": "Block",
                            "src": "24440:642:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3084,
                                        3086
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3084,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nameLocation": "24482:4:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24451:35:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3083,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3082,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "24451:23:4"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "24451:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 3086,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nameLocation": "24493:15:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24488:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 3085,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24488:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3091,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 3089,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3076,
                                                "src": "24538:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3087,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "24512:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3088,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6240,
                                            "src": "24512:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory,bool)"
                                            }
                                        },
                                        "id": 3090,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24512:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo memory,bool)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24450:101:4"
                                },
                                {
                                    "assignments": [
                                        3093
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3093,
                                            "mutability": "mutable",
                                            "name": "minimumStake",
                                            "nameLocation": "24569:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3149,
                                            "src": "24561:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3092,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "24561:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3098,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3094,
                                            "name": "minimumStakePerToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1279,
                                            "src": "24584:20:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_contract$_IERC20_$10849_$_t_uint256_$",
                                                "typeString": "mapping(contract IERC20 => uint256)"
                                            }
                                        },
                                        "id": 3097,
                                        "indexExpression": {
                                            "expression": {
                                                "id": 3095,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3084,
                                                "src": "24605:4:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo memory"
                                                }
                                            },
                                            "id": 3096,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "token",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6121,
                                            "src": "24605:10:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IERC20_$10849",
                                                "typeString": "contract IERC20"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "24584:32:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "24561:55:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                                    "typeString": "contract IERC20"
                                                },
                                                "id": 3108,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3100,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24634:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3101,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "token",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6121,
                                                    "src": "24634:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 3105,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "24663:1:4",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 3104,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "24655:7:4",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 3103,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "24655:7:4",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 3106,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "24655:10:4",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 3102,
                                                        "name": "IERC20",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 10849,
                                                        "src": "24648:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IERC20_$10849_$",
                                                            "typeString": "type(contract IERC20)"
                                                        }
                                                    },
                                                    "id": 3107,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "24648:18:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                                        "typeString": "contract IERC20"
                                                    }
                                                },
                                                "src": "24634:32:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 3109,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24668:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 3099,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24626:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3110,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24626:69:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3111,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24626:69:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3116,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3113,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24713:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3114,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "24713:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "id": 3115,
                                                    "name": "minimumStake",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3093,
                                                    "src": "24727:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "24713:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520616d6f756e7420697320746f6f20736d616c6c",
                                                "id": 3117,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24741:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_79d0dd01750da2963fe4113e437f4c554629b10632d88b1b4bfc24ae3a887468",
                                                    "typeString": "literal_string \"stake amount is too small\""
                                                },
                                                "value": "stake amount is too small"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_79d0dd01750da2963fe4113e437f4c554629b10632d88b1b4bfc24ae3a887468",
                                                    "typeString": "literal_string \"stake amount is too small\""
                                                }
                                            ],
                                            "id": 3112,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24705:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3118,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24705:64:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3119,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24705:64:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3123,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3121,
                                                    "name": "minimumStake",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3093,
                                                    "src": "24787:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3122,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "24803:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "24787:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b696e67207468697320746f6b656e20697320666f7262696464656e",
                                                "id": 3124,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24806:33:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b126e7d5c31250ef323133afe929b8a08df416ba8372063b5ffea5bccedddf89",
                                                    "typeString": "literal_string \"staking this token is forbidden\""
                                                },
                                                "value": "staking this token is forbidden"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b126e7d5c31250ef323133afe929b8a08df416ba8372063b5ffea5bccedddf89",
                                                    "typeString": "literal_string \"staking this token is forbidden\""
                                                }
                                            ],
                                            "id": 3120,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24779:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3125,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24779:61:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3126,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24779:61:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3132,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3128,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24858:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3129,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6112,
                                                    "src": "24858:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 3130,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "24879:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 3131,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "minimumUnstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5547,
                                                    "src": "24879:26:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "24858:47:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "756e7374616b652064656c617920697320746f6f20736d616c6c",
                                                "id": 3133,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24907:28:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_cc2eb55fb92b51ee24a8c2ae3908b47a7de7fce1b2a076b142f8fa368c25abb9",
                                                    "typeString": "literal_string \"unstake delay is too small\""
                                                },
                                                "value": "unstake delay is too small"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_cc2eb55fb92b51ee24a8c2ae3908b47a7de7fce1b2a076b142f8fa368c25abb9",
                                                    "typeString": "literal_string \"unstake delay is too small\""
                                                }
                                            ],
                                            "id": 3127,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24850:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3134,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24850:86:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3135,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24850:86:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3140,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3137,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3084,
                                                        "src": "24954:4:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3138,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawTime",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6114,
                                                    "src": "24954:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "24975:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "24954:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7374616b6520686173206265656e2077697468647261776e",
                                                "id": 3141,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "24978:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2101ddfdb8cd2a8c797e23955b6f14b3e90bef9bd446ac87a597ea0dc33b52cb",
                                                    "typeString": "literal_string \"stake has been withdrawn\""
                                                },
                                                "value": "stake has been withdrawn"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2101ddfdb8cd2a8c797e23955b6f14b3e90bef9bd446ac87a597ea0dc33b52cb",
                                                    "typeString": "literal_string \"stake has been withdrawn\""
                                                }
                                            ],
                                            "id": 3136,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "24946:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3142,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "24946:59:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3143,
                                    "nodeType": "ExpressionStatement",
                                    "src": "24946:59:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3145,
                                                "name": "isHubAuthorized",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3086,
                                                "src": "25023:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "7468697320687562206973206e6f7420617574686f72697a656420627920534d",
                                                "id": 3146,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25040:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_08cf58529f3a0dc022810dd3041a31940b9bbc91ffb1ec403a1a0249c7eb66da",
                                                    "typeString": "literal_string \"this hub is not authorized by SM\""
                                                },
                                                "value": "this hub is not authorized by SM"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_08cf58529f3a0dc022810dd3041a31940b9bbc91ffb1ec403a1a0249c7eb66da",
                                                    "typeString": "literal_string \"this hub is not authorized by SM\""
                                                }
                                            ],
                                            "id": 3144,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25015:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3147,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25015:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3148,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25015:60:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3074,
                            "nodeType": "StructuredDocumentation",
                            "src": "24333:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "e6e22e12",
                        "id": 3150,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyRelayManagerStaked",
                        "nameLocation": "24372:24:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3078,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "24426:8:4"
                        },
                        "parameters": {
                            "id": 3077,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3076,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "24405:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3150,
                                    "src": "24397:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3075,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "24397:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "24396:22:4"
                        },
                        "returnParameters": {
                            "id": 3079,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "24440:0:4"
                        },
                        "scope": 3330,
                        "src": "24363:719:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5761
                        ],
                        "body": {
                            "id": 3174,
                            "nodeType": "Block",
                            "src": "25192:152:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3162,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "25210:15:4",
                                                "subExpression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 3160,
                                                        "name": "isDeprecated",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3188,
                                                        "src": "25211:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                                            "typeString": "function () view returns (bool)"
                                                        }
                                                    },
                                                    "id": 3161,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "25211:14:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "416c72656164792064657072656361746564",
                                                "id": 3163,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25227:20:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_130e3894ae36b716ae912730c41f3f84b0071d54a7c954828529e20ff47f1279",
                                                    "typeString": "literal_string \"Already deprecated\""
                                                },
                                                "value": "Already deprecated"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_130e3894ae36b716ae912730c41f3f84b0071d54a7c954828529e20ff47f1279",
                                                    "typeString": "literal_string \"Already deprecated\""
                                                }
                                            ],
                                            "id": 3159,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25202:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3164,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25202:46:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3165,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25202:46:4"
                                },
                                {
                                    "expression": {
                                        "id": 3168,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 3166,
                                            "name": "deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1359,
                                            "src": "25258:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 3167,
                                            "name": "_deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3153,
                                            "src": "25276:16:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "25258:34:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3169,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25258:34:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3171,
                                                "name": "deprecationTime",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1359,
                                                "src": "25321:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3170,
                                            "name": "HubDeprecated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5653,
                                            "src": "25307:13:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 3172,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25307:30:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3173,
                                    "nodeType": "EmitStatement",
                                    "src": "25302:35:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3151,
                            "nodeType": "StructuredDocumentation",
                            "src": "25088:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "af595dfc",
                        "id": 3175,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3157,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3156,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "25182:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "25182:9:4"
                            }
                        ],
                        "name": "deprecateHub",
                        "nameLocation": "25127:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3155,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25173:8:4"
                        },
                        "parameters": {
                            "id": 3154,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3153,
                                    "mutability": "mutable",
                                    "name": "_deprecationTime",
                                    "nameLocation": "25148:16:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3175,
                                    "src": "25140:24:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3152,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25140:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25139:26:4"
                        },
                        "returnParameters": {
                            "id": 3158,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25192:0:4"
                        },
                        "scope": 3330,
                        "src": "25118:226:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5871
                        ],
                        "body": {
                            "id": 3187,
                            "nodeType": "Block",
                            "src": "25440:58:4",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 3185,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 3182,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967292,
                                                "src": "25457:5:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                }
                                            },
                                            "id": 3183,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "25457:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "id": 3184,
                                            "name": "deprecationTime",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1359,
                                            "src": "25476:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "25457:34:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3181,
                                    "id": 3186,
                                    "nodeType": "Return",
                                    "src": "25450:41:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3176,
                            "nodeType": "StructuredDocumentation",
                            "src": "25350:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "c7178230",
                        "id": 3188,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isDeprecated",
                        "nameLocation": "25389:12:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3178,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25411:8:4"
                        },
                        "parameters": {
                            "id": 3177,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25401:2:4"
                        },
                        "returnParameters": {
                            "id": 3181,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3180,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3188,
                                    "src": "25434:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3179,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25434:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25433:6:4"
                        },
                        "scope": 3330,
                        "src": "25380:118:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 3200,
                            "nodeType": "Block",
                            "src": "25620:77:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3195,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3192,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967281,
                                                        "src": "25638:3:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 3193,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "25638:10:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 3194,
                                                    "name": "penalizer",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1229,
                                                    "src": "25652:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "25638:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4e6f742070656e616c697a6572",
                                                "id": 3196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25663:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                },
                                                "value": "Not penalizer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                }
                                            ],
                                            "id": 3191,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25630:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3197,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25630:49:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3198,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25630:49:4"
                                },
                                {
                                    "id": 3199,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "25689:1:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3189,
                            "nodeType": "StructuredDocumentation",
                            "src": "25504:85:4",
                            "text": "@notice Prevents any address other than the `Penalizer` from calling this method."
                        },
                        "id": 3201,
                        "name": "penalizerOnly",
                        "nameLocation": "25603:13:4",
                        "nodeType": "ModifierDefinition",
                        "parameters": {
                            "id": 3190,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25617:2:4"
                        },
                        "src": "25594:103:4",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            5737
                        ],
                        "body": {
                            "id": 3255,
                            "nodeType": "Block",
                            "src": "25833:459:4",
                            "statements": [
                                {
                                    "assignments": [
                                        3213
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3213,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nameLocation": "25851:12:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3255,
                                            "src": "25843:20:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 3212,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "25843:7:4",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3217,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3214,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1342,
                                            "src": "25866:15:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 3216,
                                        "indexExpression": {
                                            "id": 3215,
                                            "name": "relayWorker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3204,
                                            "src": "25882:11:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "25866:28:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "25843:51:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 3224,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 3219,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3213,
                                                    "src": "25986:12:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 3222,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "26010:1:4",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 3221,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "26002:7:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 3220,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "26002:7:4",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 3223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "26002:10:4",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "25986:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 3225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26014:22:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 3218,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "25978:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25978:59:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3227,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25978:59:4"
                                },
                                {
                                    "assignments": [
                                        3232,
                                        null
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3232,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nameLocation": "26079:9:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3255,
                                            "src": "26048:40:4",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "id": 3231,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 3230,
                                                    "name": "IStakeManager.StakeInfo",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 6124,
                                                    "src": "26048:23:4"
                                                },
                                                "referencedDeclaration": 6124,
                                                "src": "26048:23:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        null
                                    ],
                                    "id": 3237,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 3235,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3213,
                                                "src": "26119:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3233,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26093:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3234,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6240,
                                            "src": "26093:25:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory,bool)"
                                            }
                                        },
                                        "id": 3236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26093:39:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_struct$_StakeInfo_$6124_memory_ptr_$_t_bool_$",
                                            "typeString": "tuple(struct IStakeManager.StakeInfo memory,bool)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "26047:85:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 3242,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "expression": {
                                                        "id": 3239,
                                                        "name": "stakeInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3232,
                                                        "src": "26150:9:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                                        }
                                                    },
                                                    "id": 3240,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6110,
                                                    "src": "26150:15:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "hexValue": "30",
                                                    "id": 3241,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "26168:1:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "26150:19:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 3243,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26171:26:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 3238,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "26142:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3244,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26142:56:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3245,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26142:56:4"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3249,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3213,
                                                "src": "26242:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3250,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3206,
                                                "src": "26256:11:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 3251,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3232,
                                                    "src": "26269:9:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 3252,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6110,
                                                "src": "26269:15:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3246,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26208:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3248,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalizeRelayManager",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6203,
                                            "src": "26208:33:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256) external"
                                            }
                                        },
                                        "id": 3253,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26208:77:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3254,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26208:77:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3202,
                            "nodeType": "StructuredDocumentation",
                            "src": "25703:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "ebcd31ac",
                        "id": 3256,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3210,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3209,
                                    "name": "penalizerOnly",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3201,
                                    "src": "25819:13:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "25819:13:4"
                            }
                        ],
                        "name": "penalize",
                        "nameLocation": "25742:8:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3208,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "25810:8:4"
                        },
                        "parameters": {
                            "id": 3207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3204,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nameLocation": "25759:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3256,
                                    "src": "25751:19:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3203,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25751:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 3206,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "25788:11:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3256,
                                    "src": "25772:27:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 3205,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "25772:15:4",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "25750:50:4"
                        },
                        "returnParameters": {
                            "id": 3211,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "25833:0:4"
                        },
                        "scope": 3330,
                        "src": "25733:559:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5865
                        ],
                        "body": {
                            "id": 3270,
                            "nodeType": "Block",
                            "src": "26413:69:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 3267,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3259,
                                                "src": "26462:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "id": 3265,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1227,
                                                "src": "26430:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 3266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "isRelayEscheatable",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6229,
                                            "src": "26430:31:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                "typeString": "function (address) view external returns (bool)"
                                            }
                                        },
                                        "id": 3268,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26430:45:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 3264,
                                    "id": 3269,
                                    "nodeType": "Return",
                                    "src": "26423:52:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3257,
                            "nodeType": "StructuredDocumentation",
                            "src": "26298:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "39622167",
                        "id": 3271,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "26337:18:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3261,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "26390:8:4"
                        },
                        "parameters": {
                            "id": 3260,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3259,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "26364:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3271,
                                    "src": "26356:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3258,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26356:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26355:22:4"
                        },
                        "returnParameters": {
                            "id": 3264,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3263,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3271,
                                    "src": "26408:4:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 3262,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26408:4:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26407:6:4"
                        },
                        "scope": 3330,
                        "src": "26328:154:4",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            5767
                        ],
                        "body": {
                            "id": 3317,
                            "nodeType": "Block",
                            "src": "26606:345:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 3283,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3274,
                                                        "src": "26656:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 3281,
                                                        "name": "stakeManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1227,
                                                        "src": "26624:12:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                                            "typeString": "contract IStakeManager"
                                                        }
                                                    },
                                                    "id": 3282,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "isRelayEscheatable",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6229,
                                                    "src": "26624:31:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view external returns (bool)"
                                                    }
                                                },
                                                "id": 3284,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "26624:45:4",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "72656c617920736572766572206e6f74206573636865617461626c6520796574",
                                                "id": 3285,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "26671:34:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                },
                                                "value": "relay server not escheatable yet"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2c978e0fbce1a22c62b2c5b2822310453b6a7c1ff19ec7ab11d5f02e926038d2",
                                                    "typeString": "literal_string \"relay server not escheatable yet\""
                                                }
                                            ],
                                            "id": 3280,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                4294967278,
                                                4294967278
                                            ],
                                            "referencedDeclaration": 4294967278,
                                            "src": "26616:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 3286,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26616:90:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3287,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26616:90:4"
                                },
                                {
                                    "assignments": [
                                        3289
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 3289,
                                            "mutability": "mutable",
                                            "name": "balance",
                                            "nameLocation": "26724:7:4",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 3317,
                                            "src": "26716:15:4",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 3288,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "26716:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 3293,
                                    "initialValue": {
                                        "baseExpression": {
                                            "id": 3290,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1350,
                                            "src": "26734:8:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 3292,
                                        "indexExpression": {
                                            "id": 3291,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3274,
                                            "src": "26743:12:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "26734:22:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "26716:40:4"
                                },
                                {
                                    "expression": {
                                        "id": 3298,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 3294,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "26766:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 3296,
                                            "indexExpression": {
                                                "id": 3295,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3274,
                                                "src": "26775:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "26766:22:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "30",
                                            "id": 3297,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "26791:1:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "26766:26:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3299,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26766:26:4"
                                },
                                {
                                    "expression": {
                                        "id": 3310,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 3300,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1350,
                                                "src": "26802:8:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 3303,
                                            "indexExpression": {
                                                "expression": {
                                                    "id": 3301,
                                                    "name": "config",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1236,
                                                    "src": "26811:6:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                        "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                    }
                                                },
                                                "id": 3302,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "devAddress",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5549,
                                                "src": "26811:17:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "26802:27:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 3309,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "baseExpression": {
                                                    "id": 3304,
                                                    "name": "balances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1350,
                                                    "src": "26832:8:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 3307,
                                                "indexExpression": {
                                                    "expression": {
                                                        "id": 3305,
                                                        "name": "config",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1236,
                                                        "src": "26841:6:4",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage",
                                                            "typeString": "struct IRelayHub.RelayHubConfig storage ref"
                                                        }
                                                    },
                                                    "id": 3306,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "devAddress",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5549,
                                                    "src": "26841:17:4",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "26832:27:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "id": 3308,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3289,
                                                "src": "26862:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "26832:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "26802:67:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 3311,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26802:67:4"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 3313,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3274,
                                                "src": "26922:12:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 3314,
                                                "name": "balance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3289,
                                                "src": "26936:7:4",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 3312,
                                            "name": "AbandonedRelayManagerBalanceEscheated",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5660,
                                            "src": "26884:37:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256)"
                                            }
                                        },
                                        "id": 3315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26884:60:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 3316,
                                    "nodeType": "EmitStatement",
                                    "src": "26879:65:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3272,
                            "nodeType": "StructuredDocumentation",
                            "src": "26488:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d26152f9",
                        "id": 3318,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 3278,
                                "kind": "modifierInvocation",
                                "modifierName": {
                                    "id": 3277,
                                    "name": "onlyOwner",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 10101,
                                    "src": "26596:9:4"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "26596:9:4"
                            }
                        ],
                        "name": "escheatAbandonedRelayBalance",
                        "nameLocation": "26527:28:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3276,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "26587:8:4"
                        },
                        "parameters": {
                            "id": 3275,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3274,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "26564:12:4",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3318,
                                    "src": "26556:20:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 3273,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "26556:7:4",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "26555:22:4"
                        },
                        "returnParameters": {
                            "id": 3279,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "26606:0:4"
                        },
                        "scope": 3330,
                        "src": "26518:433:4",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            5895
                        ],
                        "body": {
                            "id": 3328,
                            "nodeType": "Block",
                            "src": "27061:33:4",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 3325,
                                            "name": "gasleft",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967289,
                                            "src": "27078:7:4",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                "typeString": "function () view returns (uint256)"
                                            }
                                        },
                                        "id": 3326,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "27078:9:4",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 3324,
                                    "id": 3327,
                                    "nodeType": "Return",
                                    "src": "27071:16:4"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 3319,
                            "nodeType": "StructuredDocumentation",
                            "src": "26957:25:4",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "45bdade7",
                        "id": 3329,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "26996:16:4",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 3321,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "27022:8:4"
                        },
                        "parameters": {
                            "id": 3320,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "27012:2:4"
                        },
                        "returnParameters": {
                            "id": 3324,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 3323,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 3329,
                                    "src": "27053:7:4",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 3322,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "27053:7:4",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "27052:9:4"
                        },
                        "scope": 3330,
                        "src": "26987:107:4",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    }
                ],
                "scope": 3331,
                "src": "1224:25872:4",
                "usedErrors": []
            }
        ],
        "src": "0:27096:4"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.141Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "aggregateGasleft()": {
                "returns": {
                    "_0": "A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                }
            },
            "balanceOf(address)": {
                "returns": {
                    "_0": "An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                }
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "gasUsed": "An amount of gas used by the transaction.",
                    "relayData": "The details of a transaction signed by the sender."
                },
                "returns": {
                    "_0": "The calculated charge, in wei."
                }
            },
            "calculateDevCharge(uint256)": {
                "params": {
                    "charge": "The amount of Ether in wei the Paymaster will be charged for this transaction."
                },
                "returns": {
                    "_0": "The calculated devFee, in wei."
                }
            },
            "deprecateHub(uint256)": {
                "params": {
                    "_deprecationTime": "The timestamp in seconds after which the `RelayHub` stops serving transactions."
                }
            },
            "getBatchGateway()": {
                "returns": {
                    "_0": "The `BatchGateway` address for this `RelayHub`."
                }
            },
            "getConfiguration()": {
                "returns": {
                    "_0": "The configuration of the `RelayHub`."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "The block number in which the contract has been deployed."
                }
            },
            "getDeprecationTime()": {
                "returns": {
                    "_0": "The timestamp from which the hub no longer allows relaying calls."
                }
            },
            "getMinimumStakePerToken(address)": {
                "params": {
                    "token": "An address of an ERC-20 compatible tokens."
                },
                "returns": {
                    "_0": "The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                }
            },
            "getPenalizer()": {
                "returns": {
                    "_0": "The `Penalizer` address for this `RelayHub`."
                }
            },
            "getRelayRegistrar()": {
                "returns": {
                    "_0": "The `RelayRegistrar` address for this `RelayHub`."
                }
            },
            "getStakeManager()": {
                "returns": {
                    "_0": "The `StakeManager` address for this `RelayHub`."
                }
            },
            "getWorkerCount(address)": {
                "params": {
                    "manager": "An address of the Relay Manager."
                },
                "returns": {
                    "_0": "The count of Relay Workers associated with this Relay Manager."
                }
            },
            "getWorkerManager(address)": {
                "params": {
                    "worker": "An address of the Relay Worker."
                },
                "returns": {
                    "_0": "The address of its Relay Manager."
                }
            },
            "isDeprecated()": {
                "returns": {
                    "_0": "`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "penalize(address,address)": {
                "params": {
                    "beneficiary": "The address that called the `Penalizer` and will receive a reward for it.",
                    "relayWorker": "The address of the Relay Worker that committed a penalizable offense."
                }
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "params": {
                    "approvalData": "The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.",
                    "domainSeparatorName": "The name of the Domain Separator used to verify the EIP-712 signature",
                    "maxAcceptanceBudget": "The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.",
                    "relayRequest": "All details of the requested relayed call.",
                    "signature": "The client's EIP-712 signature over the `relayRequest` struct."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "params": {
                    "_config": "The new configuration."
                }
            },
            "setMinimumStakes(address[],uint256[])": {
                "params": {
                    "minimumStake": "An array of minimal amounts necessary for a corresponding token, in wei.",
                    "token": "An array of addresses of ERC-20 compatible tokens."
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "versionHub()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `RelayHub` contract."
                }
            }
        },
        "title": "The RelayHub Implementation",
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerBalanceEscheated(address,uint256)": {
                "notice": "This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`."
            },
            "Deposited(address,address,uint256)": {
                "notice": "Emitted when `depositFor` is called, including the amount and account that was funded."
            },
            "HubDeprecated(uint256)": {
                "notice": "This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
            },
            "RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Emitted when a configuration of the `RelayHub` is changed"
            },
            "RelayWorkersAdded(address,address[],uint256)": {
                "notice": "Emitted when relays are added by a relayManager"
            },
            "StakingTokenDataChanged(address,uint256)": {
                "notice": "Emitted for each token configured for staking in setMinimumStakes"
            },
            "TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)": {
                "notice": "Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged."
            },
            "TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)": {
                "notice": "Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
            },
            "TransactionResult(uint8,bytes)": {
                "notice": "This event is emitted in case the internal function returns a value or reverts with a revert string."
            },
            "Withdrawn(address,address,uint256)": {
                "notice": "Emitted when an account withdraws funds from the `RelayHub`."
            }
        },
        "kind": "user",
        "methods": {
            "addRelayWorkers(address[])": {
                "notice": "Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events."
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount."
            },
            "calculateDevCharge(uint256)": {
                "notice": "The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`."
            },
            "depositFor(address)": {
                "notice": "Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event."
            },
            "deprecateHub(uint256)": {
                "notice": "Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp"
            },
            "escheatAbandonedRelayBalance(address)": {
                "notice": "@param relayManager"
            },
            "innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)": {
                "notice": "This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context."
            },
            "isRelayEscheatable(address)": {
                "notice": "Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
            },
            "onRelayServerRegistered(address)": {
                "notice": "The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
            },
            "penalize(address,address)": {
                "notice": "In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either."
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "notice": "Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Sets or changes the configuration of this `RelayHub`."
            },
            "setMinimumStakes(address[],uint256[])": {
                "notice": "Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
            },
            "verifyRelayManagerStaked(address)": {
                "notice": "Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
            },
            "withdraw(address,uint256)": {
                "notice": "Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event."
            },
            "withdrawMultiple(address[],uint256[])": {
                "notice": "Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination."
            }
        },
        "notice": "This contract implements the `IRelayHub` interface for the EVM-compatible networks.",
        "version": 1
    }
}
