{
    "contractName": "StakeManager",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "HubAuthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "removalBlock",
                    "type": "uint256"
                }
            ],
            "name": "HubUnauthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                }
            ],
            "name": "StakeAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "reward",
                    "type": "uint256"
                }
            ],
            "name": "StakePenalized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "withdrawBlock",
                    "type": "uint256"
                }
            ],
            "name": "StakeUnlocked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "StakeWithdrawn",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "authorizedHubs",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "removalBlock",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakes",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "withdrawBlock",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionSM",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "getStakeInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "stake",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "withdrawBlock",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address payable",
                            "name": "owner",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IStakeManager.StakeInfo",
                    "name": "stakeInfo",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                }
            ],
            "name": "stakeForAddress",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "unlockStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "withdrawStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "minAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minUnstakeDelay",
                    "type": "uint256"
                }
            ],
            "name": "isRelayManagerStaked",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "penalizeRelayManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"HubAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"removalBlock\",\"type\":\"uint256\"}],\"name\":\"HubUnauthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"}],\"name\":\"StakeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"StakePenalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawBlock\",\"type\":\"uint256\"}],\"name\":\"StakeUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorizedHubs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removalBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"getStakeInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawBlock\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"struct IStakeManager.StakeInfo\",\"name\":\"stakeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minUnstakeDelay\",\"type\":\"uint256\"}],\"name\":\"isRelayManagerStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"penalizeRelayManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"}],\"name\":\"stakeForAddress\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawBlock\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"unlockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionSM\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"penalizeRelayManager(address,address,uint256)\":{\"params\":{\"amount\":\"- amount to withdraw from stake\",\"beneficiary\":\"- address that receives half of the penalty amount\",\"relayManager\":\"- entry to penalize\"}},\"stakeForAddress(address,uint256)\":{\"params\":{\"relayManager\":\"- address that represents a stake entry and controls relay registrations on relay hubs\",\"unstakeDelay\":\"- number of blocks to elapse before the owner can retrieve the stake after calling 'unlock'\"}}}},\"userdoc\":{\"methods\":{\"authorizedHubs(address,address)\":{\"notice\":\"maps relay managers to a map of addressed of their authorized hubs to the information on that hub\"},\"penalizeRelayManager(address,address,uint256)\":{\"notice\":\"Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns half of stake on the way.\"},\"stakeForAddress(address,uint256)\":{\"notice\":\"Put a stake for a relayManager and set its unstake delay. If the entry does not exist, it is created, and the caller of this function becomes its owner. If the entry already exists, only the owner can call this function.\"},\"stakes(address)\":{\"notice\":\"maps relay managers to their stakes\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/dror/IdeaProjects/gsn/contracts/StakeManager.sol\":\"StakeManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/dror/IdeaProjects/gsn/contracts/StakeManager.sol\":{\"keccak256\":\"0x5f935557678e0c627ef7d5ec7347095fc2ea9189c06e97f075c5ba1d6a3c6d71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c749049dfe9696be1a8d1618be177a3f2f098b53dd91f03f9609c223721a09cf\",\"dweb:/ipfs/QmRUsmRdMdnt6Ct4J6NMCqN3uqm7ANFUxz7LjpcTsWyiEF\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xef5e2a00a9aa741faa94cf828dc060b05566dc87e32f2b41577e7d3a97f2cd8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99cc978b676db13da12ef5da9cc509715c3f24896b98cbac1af0f9d2d0ede554\",\"dweb:/ipfs/QmWBxE1Uxru5j26xBJ9tFzivCtdy5Fe6mZuC8mgLsmubyX\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]}},\"version\":1}",
    "bytecode": "0x60e060405260286080818152906200126b60a039805162000029916000916020909101906200003e565b503480156200003757600080fd5b50620000e3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200008157805160ff1916838001178555620000b1565b82800160010185558215620000b1579182015b82811115620000b157825182559160200191906001019062000094565b50620000bf929150620000c3565b5090565b620000e091905b80821115620000bf5760008155600101620000ca565b90565b61117880620000f36000396000f3fe6080604052600436106100c25760003560e01c80637835d2961161007f578063c345315311610059578063c345315314610211578063d48a9d431461023e578063f48f8ac71461025e578063f9bce3111461027e576100c2565b80637835d296146101a45780637aeb642a146101c4578063c23a5cea146101f1576100c2565b806309a08af4146100c757806316934fc4146100e957806347116c6e146101225780634a1ce599146101445780635d2fb768146101645780636de8dd4114610177575b600080fd5b3480156100d357600080fd5b506100e76100e2366004610d5d565b61029e565b005b3480156100f557600080fd5b50610109610104366004610d09565b610452565b6040516101199493929190611106565b60405180910390f35b34801561012e57600080fd5b50610137610483565b6040516101199190610e18565b34801561015057600080fd5b506100e761015f366004610d09565b610511565b6100e7610172366004610de2565b6105d6565b34801561018357600080fd5b50610197610192366004610d9d565b610749565b6040516101199190610e0d565b3480156101b057600080fd5b506100e76101bf366004610d25565b6107c4565b3480156101d057600080fd5b506101e46101df366004610d25565b610813565b60405161011991906110ef565b3480156101fd57600080fd5b506100e761020c366004610d09565b610830565b34801561021d57600080fd5b5061023161022c366004610d09565b610971565b60405161011991906110bb565b34801561024a57600080fd5b506100e7610259366004610d09565b6109cb565b34801561026a57600080fd5b506100e7610279366004610d25565b610a12565b34801561028a57600080fd5b506100e7610299366004610d09565b610a5b565b6001600160a01b0383166000908152600260209081526040808320338452909152902054806102e85760405162461bcd60e51b81526004016102df90610f9d565b60405180910390fd5b4381116103075760405162461bcd60e51b81526004016102df90610efa565b6001600160a01b03841660009081526001602052604090205482111561033f5760405162461bcd60e51b81526004016102df90611000565b6001600160a01b0384166000908152600160205260409020546103629083610a9e565b6001600160a01b038516600090815260016020526040812091909155610389836002610ae7565b905060006103978483610a9e565b60405190915060009083156108fc0290849083818181858288f193505050501580156103c7573d6000803e3d6000fd5b506040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156103fe573d6000803e3d6000fd5b50846001600160a01b0316866001600160a01b03167f2f2ba0bf4c9bedc2210a4da5b5811c2a4fd28e62c51bb90c3ea6fdce00808eb08360405161044291906110ef565b60405180910390a3505050505050565b600160208190526000918252604090912080549181015460028201546003909201549091906001600160a01b031684565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105095780601f106104de57610100808354040283529160200191610509565b820191906000526020600020905b8154815290600101906020018083116104ec57829003601f168201915b505050505081565b6001600160a01b038082166000908152600160205260409020600381015490911633146105505760405162461bcd60e51b81526004016102df90611098565b6002810154156105725760405162461bcd60e51b81526004016102df90610ea2565b600181015461058890439063ffffffff610b2916565b6002820181905560405133916001600160a01b038516917f9ffc6168de1eb7f1d16200f614753cd7edce5a2186aab1c612199dd7316cd7c4916105ca916110ef565b60405180910390a35050565b6001600160a01b0382811660009081526001602052604090206003015416158061061c57506001600160a01b038281166000908152600160205260409020600301541633145b6106385760405162461bcd60e51b81526004016102df90611098565b6001600160a01b038216600090815260016020819052604090912001548110156106745760405162461bcd60e51b81526004016102df90610f31565b336001600160a01b038316141561069d5760405162461bcd60e51b81526004016102df90611054565b336000908152600160205260409020600301546001600160a01b0316156106d65760405162461bcd60e51b81526004016102df90610f66565b6001600160a01b038083166000818152600160208190526040918290206003810180546001600160a01b031916331790819055815434018083559190920186905591519316927fef7c8dfef14cbefdf829b8f066b068b677992411137321d64b3ed4538c2b3637916105ca9186906110f8565b6001600160a01b038085166000908152600160208181526040808420805493810154600280830154908552838720978b1687529690935290842054939490939287118015939287111592911591600019149084906107a45750825b80156107ad5750815b80156107b65750805b9a9950505050505050505050565b6001600160a01b038083166000908152600160205260409020600381015484921633146108035760405162461bcd60e51b81526004016102df90611098565b61080d8484610b4e565b50505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b0380821660009081526001602052604090206003810154909116331461086f5760405162461bcd60e51b81526004016102df90611098565b60008160020154116108935760405162461bcd60e51b81526004016102df90610fc9565b43816002015411156108b75760405162461bcd60e51b81526004016102df90610ecb565b80546001600160a01b038316600090815260016020819052604080832083815591820183905560028201839055600390910180546001600160a01b031916905551339183156108fc02918491818181858888f19350505050158015610920573d6000803e3d6000fd5b50336001600160a01b0316836001600160a01b03167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38360405161096491906110ef565b60405180910390a3505050565b610979610cd8565b506001600160a01b039081166000908152600160208181526040928390208351608081018552815481529281015491830191909152600281015492820192909252600390910154909116606082015290565b33600090815260016020526040902060038101546001600160a01b0316610a045760405162461bcd60e51b81526004016102df9061102f565b610a0e3383610b4e565b5050565b6001600160a01b03808316600090815260016020526040902060038101548492163314610a515760405162461bcd60e51b81526004016102df90611098565b61080d8484610ba5565b33600090815260016020526040902060038101546001600160a01b0316610a945760405162461bcd60e51b81526004016102df9061102f565b610a0e3383610ba5565b6000610ae083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c75565b9392505050565b6000610ae083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ca1565b600082820183811015610ae05760405162461bcd60e51b81526004016102df90610e6b565b6001600160a01b038083166000818152600260209081526040808320948616808452949091528082206000199055517fe292c4f6e9f34c975f4958cd5650a8111352feae914a67b064079571054210219190a35050565b6001600160a01b038083166000908152600260209081526040808320938516835292905220805460001914610bec5760405162461bcd60e51b81526004016102df90610f9d565b6001600160a01b038316600090815260016020819052604082200154610c1990439063ffffffff610b2916565b9050808260000181905550826001600160a01b0316846001600160a01b03167f8d941c9b73ba7e59671a59eed85054004624684182b0e4bdb56c35937bac65a683604051610c6791906110ef565b60405180910390a350505050565b60008184841115610c995760405162461bcd60e51b81526004016102df9190610e18565b505050900390565b60008183610cc25760405162461bcd60e51b81526004016102df9190610e18565b506000838581610cce57fe5b0495945050505050565b604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b600060208284031215610d1a578081fd5b8135610ae08161112a565b60008060408385031215610d37578081fd5b8235610d428161112a565b91506020830135610d528161112a565b809150509250929050565b600080600060608486031215610d71578081fd5b8335610d7c8161112a565b92506020840135610d8c8161112a565b929592945050506040919091013590565b60008060008060808587031215610db2578081fd5b8435610dbd8161112a565b93506020850135610dcd8161112a565b93969395505050506040820135916060013590565b60008060408385031215610df4578182fd5b8235610dff8161112a565b946020939093013593505050565b901515815260200190565b6000602080835283518082850152825b81811015610e4457858101830151858201604001528201610e28565b81811115610e555783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e616c72656164792070656e64696e6760881b604082015260600190565b6020808252601590820152745769746864726177616c206973206e6f742064756560581b604082015260600190565b60208082526019908201527f68756220617574686f72697a6174696f6e206578706972656400000000000000604082015260600190565b6020808252818101527f756e7374616b6544656c61792063616e6e6f7420626520646563726561736564604082015260600190565b6020808252601f908201527f73656e64657220697320612072656c61794d616e6167657220697473656c6600604082015260600190565b6020808252601290820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b604082015260600190565b6020808252601b908201527f5769746864726177616c206973206e6f74207363686564756c65640000000000604082015260600190565b60208082526015908201527470656e616c74792065786365656473207374616b6560581b604082015260600190565b6020808252600b908201526a3737ba1036b0b730b3b2b960a91b604082015260600190565b60208082526024908201527f72656c61794d616e616765722063616e6e6f74207374616b6520666f7220697460408201526339b2b63360e11b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160a01b03169181019190915260800190565b90815260200190565b918252602082015260400190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6001600160a01b038116811461113f57600080fd5b5056fea2646970667358221220636f6cc0f01d584912418a4056bc426d242cae3ed9183127f0fd663ccf1728f964736f6c634300060a0033322e302e302b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
    "deployedBytecode": "0x6080604052600436106100c25760003560e01c80637835d2961161007f578063c345315311610059578063c345315314610211578063d48a9d431461023e578063f48f8ac71461025e578063f9bce3111461027e576100c2565b80637835d296146101a45780637aeb642a146101c4578063c23a5cea146101f1576100c2565b806309a08af4146100c757806316934fc4146100e957806347116c6e146101225780634a1ce599146101445780635d2fb768146101645780636de8dd4114610177575b600080fd5b3480156100d357600080fd5b506100e76100e2366004610d5d565b61029e565b005b3480156100f557600080fd5b50610109610104366004610d09565b610452565b6040516101199493929190611106565b60405180910390f35b34801561012e57600080fd5b50610137610483565b6040516101199190610e18565b34801561015057600080fd5b506100e761015f366004610d09565b610511565b6100e7610172366004610de2565b6105d6565b34801561018357600080fd5b50610197610192366004610d9d565b610749565b6040516101199190610e0d565b3480156101b057600080fd5b506100e76101bf366004610d25565b6107c4565b3480156101d057600080fd5b506101e46101df366004610d25565b610813565b60405161011991906110ef565b3480156101fd57600080fd5b506100e761020c366004610d09565b610830565b34801561021d57600080fd5b5061023161022c366004610d09565b610971565b60405161011991906110bb565b34801561024a57600080fd5b506100e7610259366004610d09565b6109cb565b34801561026a57600080fd5b506100e7610279366004610d25565b610a12565b34801561028a57600080fd5b506100e7610299366004610d09565b610a5b565b6001600160a01b0383166000908152600260209081526040808320338452909152902054806102e85760405162461bcd60e51b81526004016102df90610f9d565b60405180910390fd5b4381116103075760405162461bcd60e51b81526004016102df90610efa565b6001600160a01b03841660009081526001602052604090205482111561033f5760405162461bcd60e51b81526004016102df90611000565b6001600160a01b0384166000908152600160205260409020546103629083610a9e565b6001600160a01b038516600090815260016020526040812091909155610389836002610ae7565b905060006103978483610a9e565b60405190915060009083156108fc0290849083818181858288f193505050501580156103c7573d6000803e3d6000fd5b506040516001600160a01b0386169082156108fc029083906000818181858888f193505050501580156103fe573d6000803e3d6000fd5b50846001600160a01b0316866001600160a01b03167f2f2ba0bf4c9bedc2210a4da5b5811c2a4fd28e62c51bb90c3ea6fdce00808eb08360405161044291906110ef565b60405180910390a3505050505050565b600160208190526000918252604090912080549181015460028201546003909201549091906001600160a01b031684565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105095780601f106104de57610100808354040283529160200191610509565b820191906000526020600020905b8154815290600101906020018083116104ec57829003601f168201915b505050505081565b6001600160a01b038082166000908152600160205260409020600381015490911633146105505760405162461bcd60e51b81526004016102df90611098565b6002810154156105725760405162461bcd60e51b81526004016102df90610ea2565b600181015461058890439063ffffffff610b2916565b6002820181905560405133916001600160a01b038516917f9ffc6168de1eb7f1d16200f614753cd7edce5a2186aab1c612199dd7316cd7c4916105ca916110ef565b60405180910390a35050565b6001600160a01b0382811660009081526001602052604090206003015416158061061c57506001600160a01b038281166000908152600160205260409020600301541633145b6106385760405162461bcd60e51b81526004016102df90611098565b6001600160a01b038216600090815260016020819052604090912001548110156106745760405162461bcd60e51b81526004016102df90610f31565b336001600160a01b038316141561069d5760405162461bcd60e51b81526004016102df90611054565b336000908152600160205260409020600301546001600160a01b0316156106d65760405162461bcd60e51b81526004016102df90610f66565b6001600160a01b038083166000818152600160208190526040918290206003810180546001600160a01b031916331790819055815434018083559190920186905591519316927fef7c8dfef14cbefdf829b8f066b068b677992411137321d64b3ed4538c2b3637916105ca9186906110f8565b6001600160a01b038085166000908152600160208181526040808420805493810154600280830154908552838720978b1687529690935290842054939490939287118015939287111592911591600019149084906107a45750825b80156107ad5750815b80156107b65750805b9a9950505050505050505050565b6001600160a01b038083166000908152600160205260409020600381015484921633146108035760405162461bcd60e51b81526004016102df90611098565b61080d8484610b4e565b50505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b0380821660009081526001602052604090206003810154909116331461086f5760405162461bcd60e51b81526004016102df90611098565b60008160020154116108935760405162461bcd60e51b81526004016102df90610fc9565b43816002015411156108b75760405162461bcd60e51b81526004016102df90610ecb565b80546001600160a01b038316600090815260016020819052604080832083815591820183905560028201839055600390910180546001600160a01b031916905551339183156108fc02918491818181858888f19350505050158015610920573d6000803e3d6000fd5b50336001600160a01b0316836001600160a01b03167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38360405161096491906110ef565b60405180910390a3505050565b610979610cd8565b506001600160a01b039081166000908152600160208181526040928390208351608081018552815481529281015491830191909152600281015492820192909252600390910154909116606082015290565b33600090815260016020526040902060038101546001600160a01b0316610a045760405162461bcd60e51b81526004016102df9061102f565b610a0e3383610b4e565b5050565b6001600160a01b03808316600090815260016020526040902060038101548492163314610a515760405162461bcd60e51b81526004016102df90611098565b61080d8484610ba5565b33600090815260016020526040902060038101546001600160a01b0316610a945760405162461bcd60e51b81526004016102df9061102f565b610a0e3383610ba5565b6000610ae083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c75565b9392505050565b6000610ae083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ca1565b600082820183811015610ae05760405162461bcd60e51b81526004016102df90610e6b565b6001600160a01b038083166000818152600260209081526040808320948616808452949091528082206000199055517fe292c4f6e9f34c975f4958cd5650a8111352feae914a67b064079571054210219190a35050565b6001600160a01b038083166000908152600260209081526040808320938516835292905220805460001914610bec5760405162461bcd60e51b81526004016102df90610f9d565b6001600160a01b038316600090815260016020819052604082200154610c1990439063ffffffff610b2916565b9050808260000181905550826001600160a01b0316846001600160a01b03167f8d941c9b73ba7e59671a59eed85054004624684182b0e4bdb56c35937bac65a683604051610c6791906110ef565b60405180910390a350505050565b60008184841115610c995760405162461bcd60e51b81526004016102df9190610e18565b505050900390565b60008183610cc25760405162461bcd60e51b81526004016102df9190610e18565b506000838581610cce57fe5b0495945050505050565b604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b600060208284031215610d1a578081fd5b8135610ae08161112a565b60008060408385031215610d37578081fd5b8235610d428161112a565b91506020830135610d528161112a565b809150509250929050565b600080600060608486031215610d71578081fd5b8335610d7c8161112a565b92506020840135610d8c8161112a565b929592945050506040919091013590565b60008060008060808587031215610db2578081fd5b8435610dbd8161112a565b93506020850135610dcd8161112a565b93969395505050506040820135916060013590565b60008060408385031215610df4578182fd5b8235610dff8161112a565b946020939093013593505050565b901515815260200190565b6000602080835283518082850152825b81811015610e4457858101830151858201604001528201610e28565b81811115610e555783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e616c72656164792070656e64696e6760881b604082015260600190565b6020808252601590820152745769746864726177616c206973206e6f742064756560581b604082015260600190565b60208082526019908201527f68756220617574686f72697a6174696f6e206578706972656400000000000000604082015260600190565b6020808252818101527f756e7374616b6544656c61792063616e6e6f7420626520646563726561736564604082015260600190565b6020808252601f908201527f73656e64657220697320612072656c61794d616e6167657220697473656c6600604082015260600190565b6020808252601290820152711a1d58881b9bdd08185d5d1a1bdc9a5e995960721b604082015260600190565b6020808252601b908201527f5769746864726177616c206973206e6f74207363686564756c65640000000000604082015260600190565b60208082526015908201527470656e616c74792065786365656473207374616b6560581b604082015260600190565b6020808252600b908201526a3737ba1036b0b730b3b2b960a91b604082015260600190565b60208082526024908201527f72656c61794d616e616765722063616e6e6f74207374616b6520666f7220697460408201526339b2b63360e11b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160a01b03169181019190915260800190565b90815260200190565b918252602082015260400190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6001600160a01b038116811461113f57600080fd5b5056fea2646970667358221220636f6cc0f01d584912418a4056bc426d242cae3ed9183127f0fd663ccf1728f964736f6c634300060a0033",
    "immutableReferences": {},
    "sourceMap": "263:77:6:-:0;185:6175;263:77;;185:6175;263:77;;;185:6175;263:77;;;;;;;;;;;;;;;:::i;:::-;;185:6175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;185:6175:6;;;-1:-1:-1;185:6175:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
    "deployedSourceMap": "185:6175:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5495:863;;;;;;;;;;-1:-1:-1;5495:863:6;;;;;;;;:::i;:::-;;391:43;;;;;;;;;;-1:-1:-1;391:43:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;263:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;2052:380;;;;;;;;;;-1:-1:-1;2052:380:6;;;;;;;;:::i;1261:785::-;;;;;;;;;:::i;4554:634::-;;;;;;;;;;-1:-1:-1;4554:634:6;;;;;;;;:::i;:::-;;;;;;;;3285:165;;;;;;;;;;-1:-1:-1;3285:165:6;;;;;;;;:::i;700:74::-;;;;;;;;;;-1:-1:-1;700:74:6;;;;;;;;:::i;:::-;;;;;;;;2438:505;;;;;;;;;;-1:-1:-1;2438:505:6;;;;;;;;:::i;440:148::-;;;;;;;;;;-1:-1:-1;440:148:6;;;;;;;;:::i;:::-;;;;;;;;3456:131;;;;;;;;;;-1:-1:-1;3456:131:6;;;;;;;;:::i;3802:169::-;;;;;;;;;;-1:-1:-1;3802:169:6;;;;;;;;:::i;3977:135::-;;;;;;;;;;-1:-1:-1;3977:135:6;;;;;;;;:::i;5495:863::-;-1:-1:-1;;;;;5644:28:6;;5620:20;5644:28;;;:14;:28;;;;;;;;5673:10;5644:40;;;;;;;:53;5715:17;5707:48;;;;-1:-1:-1;;;5707:48:6;;;;;;;;;;;;;;;;;5788:12;5773;:27;5765:65;;;;-1:-1:-1;;;5765:65:6;;;;;;;;;-1:-1:-1;;;;;5913:20:6;;;;;;:6;:20;;;;;:26;:36;-1:-1:-1;5913:36:6;5905:70;;;;-1:-1:-1;;;5905:70:6;;;;;;;;;-1:-1:-1;;;;;6027:20:6;;;;;;:6;:20;;;;;:26;6014:48;;6055:6;6014:12;:48::i;:::-;-1:-1:-1;;;;;5985:20:6;;;;;;:6;:20;;;;;:77;;;;6090:23;6103:6;6111:1;6090:12;:23::i;:::-;6073:40;;6123:14;6140:28;6153:6;6161;6140:12;:28::i;:::-;6222:27;;6123:45;;-1:-1:-1;6230:1:6;;6222:27;;;;;6242:6;;6230:1;6222:27;6230:1;6222:27;6242:6;6230:1;6222:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6259:28:6;;-1:-1:-1;;;;;6259:20:6;;;:28;;;;;6280:6;;6259:28;;;;6280:6;6259:20;:28;;;;;;;;;;;;;;;;;;;;;6331:11;-1:-1:-1;;;;;6302:49:6;6317:12;-1:-1:-1;;;;;6302:49:6;;6344:6;6302:49;;;;;;;;;;;;;;;5495:863;;;;;;:::o;391:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;391:43:6;;:::o;263:77::-;;;;;;;;;;;;;;;-1:-1:-1;;263:77:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2052:380::-;-1:-1:-1;;;;;2148:20:6;;;2123:22;2148:20;;;:6;:20;;;;;2186:10;;;;2148:20;;2186:10;2200;2186:24;2178:46;;;;-1:-1:-1;;;2178:46:6;;;;;;;;;2242:18;;;;:23;2234:51;;;;-1:-1:-1;;;2234:51:6;;;;;;;;;2333:17;;;;2316:35;;:12;;:35;:16;:35;:::i;:::-;2295:18;;;:56;;;2366:59;;2394:10;;-1:-1:-1;;;;;2366:59:6;;;;;;;;;;;;;;;;;2052:380;;:::o;1261:785::-;-1:-1:-1;;;;;1374:20:6;;;1412:1;1374:20;;;:6;:20;;;;;:26;;;;:40;;:84;;-1:-1:-1;;;;;;1418:20:6;;;;;;;:6;:20;;;;;:26;;;;1448:10;1418:40;1374:84;1366:106;;;;-1:-1:-1;;;1366:106:6;;;;;;;;;-1:-1:-1;;;;;1506:20:6;;;;;;:6;:20;;;;;;;;:33;;1490:49;;;1482:94;;;;-1:-1:-1;;;1482:94:6;;;;;;;;;1594:10;-1:-1:-1;;;;;1594:26:6;;;;1586:75;;;;-1:-1:-1;;;1586:75:6;;;;;;;;;1686:10;1715:1;1679:18;;;:6;:18;;;;;:24;;;-1:-1:-1;;;;;1679:24:6;:38;1671:82;;;;-1:-1:-1;;;1671:82:6;;;;;;;;;-1:-1:-1;;;;;1763:20:6;;;;;;;:6;:20;;;;;;;;;:26;;;:39;;-1:-1:-1;;;;;;1763:39:6;1792:10;1763:39;;;;;1812;;1842:9;1812:39;;;;1861:33;;;;:48;;;1924:115;;1949:26;;;1924:115;;;;1897:12;;1924:115;;4554:634;-1:-1:-1;;;;;4757:20:6;;;4716:4;4757:20;;;:6;:20;;;;;;;;4813:10;;4871:17;;;;4938:18;;;;;4994:28;;;;;;:38;;;;;;;;;;;;:51;4716:4;;4757:20;;4813:23;;-1:-1:-1;4813:23:6;;;4871:36;;-1:-1:-1;4871:36:6;;4938:23;;;-1:-1:-1;;4994:63:6;;4813:23;;5082:47;;;5112:17;5082:47;:72;;;;;5141:13;5082:72;:99;;;;;5166:15;5082:99;5067:114;4554:634;-1:-1:-1;;;;;;;;;;4554:634:6:o;3285:165::-;-1:-1:-1;;;;;3026:20:6;;;3001:22;3026:20;;;:6;:20;;;;;3064:10;;;;3373:12;;3064:10;3078;3064:24;3056:46;;;;-1:-1:-1;;;3056:46:6;;;;;;;;;3406:37:::1;3420:12;3434:8;3406:13;:37::i;:::-;3285:165:::0;;;;:::o;700:74::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2438:505::-;-1:-1:-1;;;;;2536:20:6;;;2511:22;2536:20;;;:6;:20;;;;;2574:10;;;;2536:20;;2574:10;2588;2574:24;2566:46;;;;-1:-1:-1;;;2566:46:6;;;;;;;;;2651:1;2630:4;:18;;;:22;2622:62;;;;-1:-1:-1;;;2622:62:6;;;;;;;;;2724:12;2702:4;:18;;;:34;;2694:68;;;;-1:-1:-1;;;2694:68:6;;;;;;;;;2789:10;;-1:-1:-1;;;;;2816:20:6;;2772:14;2816:20;;;:6;:20;;;;;;;;2809:27;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2809:27:6;;;2846;:10;;:27;;;;;2789:10;;2846:27;2772:14;2846:27;2789:10;2846;:27;;;;;;;;;;;;;;;;;;;;;2917:10;-1:-1:-1;;;;;2888:48:6;2903:12;-1:-1:-1;;;;;2888:48:6;;2929:6;2888:48;;;;;;;;;;;;;;;2438:505;;;:::o;440:148::-;516:26;;:::i;:::-;-1:-1:-1;;;;;;561:20:6;;;;;;;:6;:20;;;;;;;;;554:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;440:148::o;3456:131::-;3192:10;3160:22;3185:18;;;:6;:18;;;;;3221:10;;;;-1:-1:-1;;;;;3221:10:6;3213:48;;;;-1:-1:-1;;;3213:48:6;;;;;;;;;3545:35:::1;3559:10;3571:8;3545:13;:35::i;:::-;3456:131:::0;;:::o;3802:169::-;-1:-1:-1;;;;;3026:20:6;;;3001:22;3026:20;;;:6;:20;;;;;3064:10;;;;3901:12;;3064:10;3078;3064:24;3056:46;;;;-1:-1:-1;;;3056:46:6;;;;;;;;;3925:39:::1;3941:12;3955:8;3925:15;:39::i;3977:135::-:0;3192:10;3160:22;3185:18;;;:6;:18;;;;;3221:10;;;;-1:-1:-1;;;;;3221:10:6;3213:48;;;;-1:-1:-1;;;3213:48:6;;;;;;;;;4068:37:::1;4084:10;4096:8;4068:15;:37::i;1321:134:37:-:0;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;1321:134;-1:-1:-1;;;1321:134:37:o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:37;;;;;;;;3593:203:6;-1:-1:-1;;;;;3675:28:6;;;;;;;:14;:28;;;;;;;;:38;;;;;;;;;;;;;-1:-1:-1;;3675:62:6;;3752:37;;;3675:28;3752:37;3593:203;;:::o;4118:430::-;-1:-1:-1;;;;;4233:28:6;;;4202;4233;;;:14;:28;;;;;;;;:38;;;;;;;;;4289:20;;-1:-1:-1;;4289:32:6;4281:63;;;;-1:-1:-1;;;4281:63:6;;;;;;;;;-1:-1:-1;;;;;4394:20:6;;4354;4394;;;:6;:20;;;;;;;:33;;4377:51;;:12;;:51;:16;:51;:::i;:::-;4354:74;;4461:12;4438:7;:20;;:35;;;;4518:8;-1:-1:-1;;;;;4488:53:6;4504:12;-1:-1:-1;;;;;4488:53:6;;4528:12;4488:53;;;;;;;;;;;;;;;4118:430;;;;:::o;1746:187:37:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:37;;;;;;;;;;-1:-1:-1;;;1902:5:37;;;1746:187::o;3713:272::-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:37;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:37:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;432:241::-;;536:2;524:9;515:7;511:23;507:32;504:2;;;-1:-1;;542:12;504:2;85:6;72:20;97:33;124:5;97:33;;680:366;;;801:2;789:9;780:7;776:23;772:32;769:2;;;-1:-1;;807:12;769:2;85:6;72:20;97:33;124:5;97:33;;;859:63;-1:-1;959:2;998:22;;72:20;97:33;72:20;97:33;;;967:63;;;;763:283;;;;;;1053:507;;;;1199:2;1187:9;1178:7;1174:23;1170:32;1167:2;;;-1:-1;;1205:12;1167:2;85:6;72:20;97:33;124:5;97:33;;;1257:63;-1:-1;1357:2;1404:22;;217:20;242:41;217:20;242:41;;;1161:399;;1365:71;;-1:-1;;;1473:2;1512:22;;;;362:20;;1161:399;1567:617;;;;;1722:3;1710:9;1701:7;1697:23;1693:33;1690:2;;;-1:-1;;1729:12;1690:2;85:6;72:20;97:33;124:5;97:33;;;1781:63;-1:-1;1881:2;1920:22;;72:20;97:33;72:20;97:33;;;1684:500;;1889:63;;-1:-1;;;;1989:2;2028:22;;362:20;;2097:2;2136:22;362:20;;1684:500;2191:366;;;2312:2;2300:9;2291:7;2287:23;2283:32;2280:2;;;-1:-1;;2318:12;2280:2;85:6;72:20;97:33;124:5;97:33;;;2370:63;2470:2;2509:22;;;;362:20;;-1:-1;;;2274:283;8455:210;16138:13;;16131:21;2907:34;;8576:2;8561:18;;8547:118;8672:310;;8819:2;;8840:17;8833:47;3098:5;15655:12;15812:6;8819:2;8808:9;8804:18;15800:19;-1:-1;16444:101;16458:6;16455:1;16452:13;16444:101;;;16525:11;;;;;16519:18;16506:11;;;15840:14;16506:11;16499:39;16473:10;;16444:101;;;16560:6;16557:1;16554:13;16551:2;;;-1:-1;15840:14;16616:6;8808:9;16607:16;;16600:27;16551:2;-1:-1;16732:7;16716:14;-1:-1;;16712:28;3256:39;;;;15840:14;3256:39;;8790:192;-1:-1;;;8790:192;8989:416;9189:2;9203:47;;;3532:2;9174:18;;;15800:19;3568:29;15840:14;;;3548:50;3617:12;;;9160:245;9412:416;9612:2;9626:47;;;3868:2;9597:18;;;15800:19;-1:-1;;;15840:14;;;3884:38;3941:12;;;9583:245;9835:416;10035:2;10049:47;;;4192:2;10020:18;;;15800:19;-1:-1;;;15840:14;;;4208:44;4271:12;;;10006:245;10258:416;10458:2;10472:47;;;4522:2;10443:18;;;15800:19;4558:27;15840:14;;;4538:48;4605:12;;;10429:245;10681:416;10881:2;10895:47;;;10866:18;;;15800:19;4892:34;15840:14;;;4872:55;4946:12;;;10852:245;11104:416;11304:2;11318:47;;;5197:2;11289:18;;;15800:19;5233:33;15840:14;;;5213:54;5286:12;;;11275:245;11527:416;11727:2;11741:47;;;5537:2;11712:18;;;15800:19;-1:-1;;;15840:14;;;5553:41;5613:12;;;11698:245;11950:416;12150:2;12164:47;;;5864:2;12135:18;;;15800:19;5900:29;15840:14;;;5880:50;5949:12;;;12121:245;12373:416;12573:2;12587:47;;;6200:2;12558:18;;;15800:19;-1:-1;;;15840:14;;;6216:44;6279:12;;;12544:245;12796:416;12996:2;13010:47;;;6530:2;12981:18;;;15800:19;-1:-1;;;15840:14;;;6546:34;6599:12;;;12967:245;13219:416;13419:2;13433:47;;;6850:2;13404:18;;;15800:19;6886:34;15840:14;;;6866:55;-1:-1;;;6941:12;;;6934:28;6981:12;;;13390:245;13642:416;13842:2;13856:47;;;7232:1;13827:18;;;15800:19;-1:-1;;;15840:14;;;7247:32;7298:12;;;13813:245;14065:331;7609:23;;8286:37;;7788:4;7777:16;;;7771:23;7848:14;;;8286:37;7951:4;7940:16;;;7934:23;8011:14;;;8286:37;8106:4;8095:16;;;8089:23;-1:-1;;;;;16226:54;8182:14;;;2641:45;;;;14246:3;14231:19;;14217:179;14403:222;8286:37;;;14530:2;14515:18;;14501:124;14632:333;8286:37;;;14951:2;14936:18;;8286:37;14787:2;14772:18;;14758:207;14972:588;8286:37;;;15364:2;15349:18;;8286:37;;;;15447:2;15432:18;;8286:37;-1:-1;;;;;16226:54;15546:2;15531:18;;2641:45;15199:3;15184:19;;15170:390;16753:117;-1:-1;;;;;16226:54;;16812:35;;16802:2;;16861:1;;16851:12;16802:2;16796:74;",
    "source": "// SPDX-License-Identifier:MIT\npragma solidity ^0.6.2;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"./interfaces/IStakeManager.sol\";\n\ncontract StakeManager is IStakeManager {\n    using SafeMath for uint256;\n\n    string public override versionSM = \"2.0.0+opengsn.stakemanager.istakemanager\";\n\n    /// maps relay managers to their stakes\n    mapping(address => StakeInfo) public stakes;\n    function getStakeInfo(address relayManager) external override view returns (StakeInfo memory stakeInfo) {\n        return stakes[relayManager];\n    }\n\n    /// maps relay managers to a map of addressed of their authorized hubs to the information on that hub\n    mapping(address => mapping(address => RelayHubInfo)) public authorizedHubs;\n\n    /// Put a stake for a relayManager and set its unstake delay.\n    /// If the entry does not exist, it is created, and the caller of this function becomes its owner.\n    /// If the entry already exists, only the owner can call this function.\n    /// @param relayManager - address that represents a stake entry and controls relay registrations on relay hubs\n    /// @param unstakeDelay - number of blocks to elapse before the owner can retrieve the stake after calling 'unlock'\n    function stakeForAddress(address relayManager, uint256 unstakeDelay) external override payable {\n        require(stakes[relayManager].owner == address(0) || stakes[relayManager].owner == msg.sender, \"not owner\");\n        require(unstakeDelay >= stakes[relayManager].unstakeDelay, \"unstakeDelay cannot be decreased\");\n        require(msg.sender != relayManager, \"relayManager cannot stake for itself\");\n        require(stakes[msg.sender].owner == address(0), \"sender is a relayManager itself\");\n        stakes[relayManager].owner = msg.sender;\n        stakes[relayManager].stake += msg.value;\n        stakes[relayManager].unstakeDelay = unstakeDelay;\n        emit StakeAdded(relayManager, stakes[relayManager].owner, stakes[relayManager].stake, stakes[relayManager].unstakeDelay);\n    }\n\n    function unlockStake(address relayManager) external override {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.owner == msg.sender, \"not owner\");\n        require(info.withdrawBlock == 0, \"already pending\");\n        info.withdrawBlock = block.number.add(info.unstakeDelay);\n        emit StakeUnlocked(relayManager, msg.sender, info.withdrawBlock);\n    }\n\n    function withdrawStake(address relayManager) external override {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.owner == msg.sender, \"not owner\");\n        require(info.withdrawBlock > 0, \"Withdrawal is not scheduled\");\n        require(info.withdrawBlock <= block.number, \"Withdrawal is not due\");\n        uint256 amount = info.stake;\n        delete stakes[relayManager];\n        msg.sender.transfer(amount);\n        emit StakeWithdrawn(relayManager, msg.sender, amount);\n    }\n\n    modifier ownerOnly (address relayManager) {\n        StakeInfo storage info = stakes[relayManager];\n        require(info.owner == msg.sender, \"not owner\");\n        _;\n    }\n\n    modifier managerOnly () {\n        StakeInfo storage info = stakes[msg.sender];\n        require(info.owner != address(0), \"not manager\");\n        _;\n    }\n\n    function authorizeHubByOwner(address relayManager, address relayHub) external ownerOnly(relayManager) override {\n        _authorizeHub(relayManager, relayHub);\n    }\n\n    function authorizeHubByManager(address relayHub) external managerOnly override {\n        _authorizeHub(msg.sender, relayHub);\n    }\n\n    function _authorizeHub(address relayManager, address relayHub) internal {\n        authorizedHubs[relayManager][relayHub].removalBlock = uint(-1);\n        emit HubAuthorized(relayManager, relayHub);\n    }\n\n    function unauthorizeHubByOwner(address relayManager, address relayHub) external override ownerOnly(relayManager) {\n        _unauthorizeHub(relayManager, relayHub);\n    }\n\n    function unauthorizeHubByManager(address relayHub) external override managerOnly {\n        _unauthorizeHub(msg.sender, relayHub);\n    }\n\n    function _unauthorizeHub(address relayManager, address relayHub) internal {\n        RelayHubInfo storage hubInfo = authorizedHubs[relayManager][relayHub];\n        require(hubInfo.removalBlock == uint(-1), \"hub not authorized\");\n        uint256 removalBlock = block.number.add(stakes[relayManager].unstakeDelay);\n        hubInfo.removalBlock = removalBlock;\n        emit HubUnauthorized(relayManager, relayHub, removalBlock);\n    }\n\n    function isRelayManagerStaked(address relayManager, address relayHub, uint256 minAmount, uint256 minUnstakeDelay)\n    external\n    override\n    view\n    returns (bool) {\n        StakeInfo storage info = stakes[relayManager];\n        bool isAmountSufficient = info.stake >= minAmount;\n        bool isDelaySufficient = info.unstakeDelay >= minUnstakeDelay;\n        bool isStakeLocked = info.withdrawBlock == 0;\n        bool isHubAuthorized = authorizedHubs[relayManager][relayHub].removalBlock == uint(-1);\n        return\n        isAmountSufficient &&\n        isDelaySufficient &&\n        isStakeLocked &&\n        isHubAuthorized;\n    }\n\n    /// Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns half of stake on the way.\n    /// @param relayManager - entry to penalize\n    /// @param beneficiary - address that receives half of the penalty amount\n    /// @param amount - amount to withdraw from stake\n    function penalizeRelayManager(address relayManager, address payable beneficiary, uint256 amount) external override {\n        uint256 removalBlock =  authorizedHubs[relayManager][msg.sender].removalBlock;\n        require(removalBlock != 0, \"hub not authorized\");\n        require(removalBlock > block.number, \"hub authorization expired\");\n\n        // Half of the stake will be burned (sent to address 0)\n        require(stakes[relayManager].stake >= amount, \"penalty exceeds stake\");\n        stakes[relayManager].stake = SafeMath.sub(stakes[relayManager].stake, amount);\n\n        uint256 toBurn = SafeMath.div(amount, 2);\n        uint256 reward = SafeMath.sub(amount, toBurn);\n\n        // Ether is burned and transferred\n        address(0).transfer(toBurn);\n        beneficiary.transfer(reward);\n        emit StakePenalized(relayManager, beneficiary, reward);\n    }\n}\n",
    "sourcePath": "/Users/dror/IdeaProjects/gsn/contracts/StakeManager.sol",
    "ast": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/StakeManager.sol",
        "exportedSymbols": {
            "StakeManager": [
                2479
            ]
        },
        "id": 2480,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 1880,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:6"
            },
            {
                "id": 1881,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:6"
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "@openzeppelin/contracts/math/SafeMath.sol",
                "id": 1882,
                "nodeType": "ImportDirective",
                "scope": 2480,
                "sourceUnit": 6762,
                "src": "90:51:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1883,
                "nodeType": "ImportDirective",
                "scope": 2480,
                "sourceUnit": 3768,
                "src": "143:40:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 1884,
                            "name": "IStakeManager",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3767,
                            "src": "210:13:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "id": 1885,
                        "nodeType": "InheritanceSpecifier",
                        "src": "210:13:6"
                    }
                ],
                "contractDependencies": [
                    3767
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 2479,
                "linearizedBaseContracts": [
                    2479,
                    3767
                ],
                "name": "StakeManager",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 1888,
                        "libraryName": {
                            "contractScope": null,
                            "id": 1886,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6761,
                            "src": "236:8:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$6761",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "230:27:6",
                        "typeName": {
                            "id": 1887,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "249:7:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            3766
                        ],
                        "constant": false,
                        "functionSelector": "47116c6e",
                        "id": 1892,
                        "mutability": "mutable",
                        "name": "versionSM",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 1890,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "277:8:6"
                        },
                        "scope": 2479,
                        "src": "263:77:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 1889,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "263:6:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
                            "id": 1891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "298:42:6",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_89fa7318ce3e46b2742b6b9f12ca0e926d2c574778a6383c25e75f654f2a36cc",
                                "typeString": "literal_string \"2.0.0+opengsn.stakemanager.istakemanager\""
                            },
                            "value": "2.0.0+opengsn.stakemanager.istakemanager"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 1893,
                            "nodeType": "StructuredDocumentation",
                            "src": "347:39:6",
                            "text": "maps relay managers to their stakes"
                        },
                        "functionSelector": "16934fc4",
                        "id": 1897,
                        "mutability": "mutable",
                        "name": "stakes",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "391:43:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                            "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                        },
                        "typeName": {
                            "id": 1896,
                            "keyType": {
                                "id": 1894,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "399:7:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "391:29:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                            },
                            "valueType": {
                                "contractScope": null,
                                "id": 1895,
                                "name": "StakeInfo",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3686,
                                "src": "410:9:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                    "typeString": "struct IStakeManager.StakeInfo"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3761
                        ],
                        "body": {
                            "id": 1909,
                            "nodeType": "Block",
                            "src": "544:44:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1905,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "561:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 1907,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 1906,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1899,
                                            "src": "568:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "561:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 1904,
                                    "id": 1908,
                                    "nodeType": "Return",
                                    "src": "554:27:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c3453153",
                        "id": 1910,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1901,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "493:8:6"
                        },
                        "parameters": {
                            "id": 1900,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1899,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1910,
                                    "src": "462:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1898,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "462:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "461:22:6"
                        },
                        "returnParameters": {
                            "id": 1904,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1903,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1910,
                                    "src": "516:26:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1902,
                                        "name": "StakeInfo",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3686,
                                        "src": "516:9:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "515:28:6"
                        },
                        "scope": 2479,
                        "src": "440:148:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 1911,
                            "nodeType": "StructuredDocumentation",
                            "src": "594:101:6",
                            "text": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
                        },
                        "functionSelector": "7aeb642a",
                        "id": 1917,
                        "mutability": "mutable",
                        "name": "authorizedHubs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "700:74:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                        },
                        "typeName": {
                            "id": 1916,
                            "keyType": {
                                "id": 1912,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "708:7:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "700:52:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                            },
                            "valueType": {
                                "id": 1915,
                                "keyType": {
                                    "id": 1913,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "727:7:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "719:32:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo)"
                                },
                                "valueType": {
                                    "contractScope": null,
                                    "id": 1914,
                                    "name": "RelayHubInfo",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3689,
                                    "src": "738:12:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                        "typeString": "struct IStakeManager.RelayHubInfo"
                                    }
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3697
                        ],
                        "body": {
                            "id": 2018,
                            "nodeType": "Block",
                            "src": "1356:690:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 1943,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    },
                                                    "id": 1935,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1927,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1897,
                                                                "src": "1374:6:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 1929,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1928,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1920,
                                                                "src": "1381:12:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "1374:20:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 1930,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "owner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3685,
                                                        "src": "1374:26:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "hexValue": "30",
                                                                "id": 1933,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "1412:1:6",
                                                                "subdenomination": null,
                                                                "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": 1932,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "1404:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 1931,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "1404:7:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 1934,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "1404:10:6",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "src": "1374:40:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    },
                                                    "id": 1942,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1936,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1897,
                                                                "src": "1418:6:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 1938,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1937,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1920,
                                                                "src": "1425:12:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "1418:20:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 1939,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "owner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3685,
                                                        "src": "1418:26:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1940,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "1448:3:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1941,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "1448:10:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "src": "1418:40:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "1374:84:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 1944,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1460:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 1926,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1366:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1945,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1366:106:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1946,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1366:106:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1953,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1948,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1922,
                                                    "src": "1490:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1949,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "1506:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 1951,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1950,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1920,
                                                            "src": "1513:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "1506:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 1952,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3681,
                                                    "src": "1506:33:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "1490:49:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e7374616b6544656c61792063616e6e6f7420626520646563726561736564",
                                                "id": 1954,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1541:34:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                },
                                                "value": "unstakeDelay cannot be decreased"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                }
                                            ],
                                            "id": 1947,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1482:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1955,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1482:94:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1956,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1482:94:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1961,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1958,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "1594:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1959,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1594:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1960,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1608:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "1594:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c61794d616e616765722063616e6e6f74207374616b6520666f7220697473656c66",
                                                "id": 1962,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1622:38:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eef05cddcc6711e1883f4d767944f6894528cad013bd13ea620e6a3c137af2cb",
                                                    "typeString": "literal_string \"relayManager cannot stake for itself\""
                                                },
                                                "value": "relayManager cannot stake for itself"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eef05cddcc6711e1883f4d767944f6894528cad013bd13ea620e6a3c137af2cb",
                                                    "typeString": "literal_string \"relayManager cannot stake for itself\""
                                                }
                                            ],
                                            "id": 1957,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1586:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1963,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1586:75:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1964,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1586:75:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 1975,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1966,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "1679:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 1969,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1967,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "1686:3:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1968,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "1686:10:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "1679:18:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 1970,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "1679:24:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1973,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1715:1:6",
                                                            "subdenomination": null,
                                                            "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": 1972,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1707:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1971,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1707:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1974,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1707:10:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "1679:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "73656e64657220697320612072656c61794d616e6167657220697473656c66",
                                                "id": 1976,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1719:33:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_763b6ed597bcb569038eba65de116a04cfc859676c1cd487949c085a78205d20",
                                                    "typeString": "literal_string \"sender is a relayManager itself\""
                                                },
                                                "value": "sender is a relayManager itself"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_763b6ed597bcb569038eba65de116a04cfc859676c1cd487949c085a78205d20",
                                                    "typeString": "literal_string \"sender is a relayManager itself\""
                                                }
                                            ],
                                            "id": 1965,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1671:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1671:82:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1978,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1671:82:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1985,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1979,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1763:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1981,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1980,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1770:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1763:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1982,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3685,
                                            "src": "1763:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1983,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "1792:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 1984,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1792:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "src": "1763:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "id": 1986,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1763:39:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1993,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1987,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1812:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1989,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1988,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1819:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1812:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1990,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "1812:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1991,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "1842:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 1992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "value",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1842:9:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1812:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1994,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1812:39:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2000,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1995,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1861:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1997,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1996,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1868:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1861:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1998,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3681,
                                            "src": "1861:33:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 1999,
                                            "name": "unstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1922,
                                            "src": "1897:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1861:48:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2001,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1861:48:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2003,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1920,
                                                "src": "1935:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2004,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "1949:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2006,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2005,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "1956:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1949:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2007,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "owner",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3685,
                                                "src": "1949:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2008,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "1977:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2010,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2009,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "1984:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1977:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2011,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3679,
                                                "src": "1977:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2012,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "2005:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2014,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2013,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "2012:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2005:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2015,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3681,
                                                "src": "2005:33:6",
                                                "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"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 2002,
                                            "name": "StakeAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3636,
                                            "src": "1924:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256,uint256)"
                                            }
                                        },
                                        "id": 2016,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1924:115:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2017,
                                    "nodeType": "EmitStatement",
                                    "src": "1919:120:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1918,
                            "nodeType": "StructuredDocumentation",
                            "src": "781:475:6",
                            "text": "Put a stake for a relayManager and set its unstake delay.\n If the entry does not exist, it is created, and the caller of this function becomes its owner.\n If the entry already exists, only the owner can call this function.\n @param relayManager - address that represents a stake entry and controls relay registrations on relay hubs\n @param unstakeDelay - number of blocks to elapse before the owner can retrieve the stake after calling 'unlock'"
                        },
                        "functionSelector": "5d2fb768",
                        "id": 2019,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "stakeForAddress",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1924,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1339:8:6"
                        },
                        "parameters": {
                            "id": 1923,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1920,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2019,
                                    "src": "1286:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1919,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1286:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1922,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2019,
                                    "src": "1308:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1921,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1308:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1285:44:6"
                        },
                        "returnParameters": {
                            "id": 1925,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1356:0:6"
                        },
                        "scope": 2479,
                        "src": "1261:785:6",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3702
                        ],
                        "body": {
                            "id": 2067,
                            "nodeType": "Block",
                            "src": "2113:319:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2026
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2026,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2067,
                                            "src": "2123:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2025,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "2123:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2030,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2027,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "2148:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2029,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2028,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2021,
                                            "src": "2155:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "2148:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2123:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2036,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2032,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2186:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2033,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "2186:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2034,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "2200:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2035,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2200:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2186:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2037,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2212:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2031,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2178:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2038,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2178:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2039,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2178:46:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2041,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2242:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2042,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2242:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2043,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2264:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2242:23:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "616c72656164792070656e64696e67",
                                                "id": 2045,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2267:17:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                },
                                                "value": "already pending"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                }
                                            ],
                                            "id": 2040,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2234:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2046,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2234:51:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2047,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2234:51:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2048,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2026,
                                                "src": "2295:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2050,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3683,
                                            "src": "2295:18:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2054,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2333:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2055,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3681,
                                                    "src": "2333:17:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2051,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "2316:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2052,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2316:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 2053,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "2316:16:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 2056,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2316:35:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2295:56:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2295:56:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2060,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2021,
                                                "src": "2380:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2061,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2394:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2062,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2394:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2063,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2026,
                                                    "src": "2406:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 2064,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "withdrawBlock",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3683,
                                                "src": "2406:18:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2059,
                                            "name": "StakeUnlocked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3645,
                                            "src": "2366:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2366:59:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2066,
                                    "nodeType": "EmitStatement",
                                    "src": "2361:64:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "4a1ce599",
                        "id": 2068,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unlockStake",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2023,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2104:8:6"
                        },
                        "parameters": {
                            "id": 2022,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2021,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2068,
                                    "src": "2073:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2020,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2073:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2072:22:6"
                        },
                        "returnParameters": {
                            "id": 2024,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2113:0:6"
                        },
                        "scope": 2479,
                        "src": "2052:380:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3707
                        ],
                        "body": {
                            "id": 2131,
                            "nodeType": "Block",
                            "src": "2501:442:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2075
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2075,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2131,
                                            "src": "2511:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2074,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "2511:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2079,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2076,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "2536:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2078,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2077,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2070,
                                            "src": "2543:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "2536:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2511:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2085,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2081,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2574:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2082,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "2574:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2083,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "2588:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2084,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2588:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2574:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2086,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2600:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2080,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2566:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2087,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2566:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2088,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2566:46:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2093,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2090,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2630:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2091,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2630:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2092,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2651:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2630:22:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5769746864726177616c206973206e6f74207363686564756c6564",
                                                "id": 2094,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2654:29:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                },
                                                "value": "Withdrawal is not scheduled"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                }
                                            ],
                                            "id": 2089,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2622:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2095,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2622:62:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2096,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2622:62:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2102,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2098,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2702:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2099,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2702:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2100,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "2724:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2101,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2724:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2702:34:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5769746864726177616c206973206e6f7420647565",
                                                "id": 2103,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2738:23:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                },
                                                "value": "Withdrawal is not due"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                }
                                            ],
                                            "id": 2097,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2694:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2104,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2694:68:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2105,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2694:68:6"
                                },
                                {
                                    "assignments": [
                                        2107
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2107,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2131,
                                            "src": "2772:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2106,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2772:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2110,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 2108,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2075,
                                            "src": "2789:4:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 2109,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3679,
                                        "src": "2789:10:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2772:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2114,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "delete",
                                        "prefix": true,
                                        "src": "2809:27:6",
                                        "subExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2111,
                                                "name": "stakes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1897,
                                                "src": "2816:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                }
                                            },
                                            "id": 2113,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2112,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2070,
                                                "src": "2823:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2816:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2115,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2809:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2121,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2107,
                                                "src": "2866:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2116,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2846:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2119,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2846:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2120,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2846:19:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2122,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2846:27:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2123,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2846:27:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2125,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2070,
                                                "src": "2903:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2126,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2917:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2127,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2917:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2128,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2107,
                                                "src": "2929:6:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2124,
                                            "name": "StakeWithdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3654,
                                            "src": "2888:14:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2129,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2888:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2130,
                                    "nodeType": "EmitStatement",
                                    "src": "2883:53:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c23a5cea",
                        "id": 2132,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawStake",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2072,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2492:8:6"
                        },
                        "parameters": {
                            "id": 2071,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2070,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2132,
                                    "src": "2461:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2069,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2461:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2460:22:6"
                        },
                        "returnParameters": {
                            "id": 2073,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2501:0:6"
                        },
                        "scope": 2479,
                        "src": "2438:505:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2152,
                            "nodeType": "Block",
                            "src": "2991:129:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2137
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2137,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2152,
                                            "src": "3001:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2136,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "3001:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2141,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2138,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "3026:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2140,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2139,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2134,
                                            "src": "3033:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3026:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3001:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2147,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2143,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2137,
                                                        "src": "3064:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2144,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "3064:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2145,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "3078:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2146,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "3078:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3064:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2148,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3090:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2142,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3056:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2149,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3056:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2150,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3056:46:6"
                                },
                                {
                                    "id": 2151,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "3112:1:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2153,
                        "name": "ownerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2135,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2134,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2153,
                                    "src": "2969:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2133,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2969:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2968:22:6"
                        },
                        "src": "2949:171:6",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2174,
                            "nodeType": "Block",
                            "src": "3150:129:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2156
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2156,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2174,
                                            "src": "3160:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2155,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "3160:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2161,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2157,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "3185:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2160,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2158,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "3192:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 2159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3192:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3185:18:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3160:43:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2169,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2163,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2156,
                                                        "src": "3221:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2164,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "3221:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 2167,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3243:1:6",
                                                            "subdenomination": null,
                                                            "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": 2166,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3235:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 2165,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3235:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 2168,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3235:10:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3221:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206d616e61676572",
                                                "id": 2170,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3247:13:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                },
                                                "value": "not manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                }
                                            ],
                                            "id": 2162,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3213:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2171,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3213:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2172,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3213:48:6"
                                },
                                {
                                    "id": 2173,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "3271:1:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2175,
                        "name": "managerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2154,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3147:2:6"
                        },
                        "src": "3126:153:6",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3714
                        ],
                        "body": {
                            "id": 2191,
                            "nodeType": "Block",
                            "src": "3396:54:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2187,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2177,
                                                "src": "3420:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2188,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2179,
                                                "src": "3434:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2186,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2233,
                                            "src": "3406:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2189,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3406:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2190,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3406:37:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "7835d296",
                        "id": 2192,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 2182,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2177,
                                        "src": "3373:12:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 2183,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2181,
                                    "name": "ownerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2153,
                                    "src": "3363:9:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_address_$",
                                        "typeString": "modifier (address)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3363:23:6"
                            }
                        ],
                        "name": "authorizeHubByOwner",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2184,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3387:8:6"
                        },
                        "parameters": {
                            "id": 2180,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2177,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2192,
                                    "src": "3314:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2176,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3314:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2179,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2192,
                                    "src": "3336:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2178,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3336:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3313:40:6"
                        },
                        "returnParameters": {
                            "id": 2185,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3396:0:6"
                        },
                        "scope": 2479,
                        "src": "3285:165:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3719
                        ],
                        "body": {
                            "id": 2206,
                            "nodeType": "Block",
                            "src": "3535:52:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2201,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "3559:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2202,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "3559:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2203,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2194,
                                                "src": "3571:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2200,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2233,
                                            "src": "3545:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2204,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3545:35:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2205,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3545:35:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d48a9d43",
                        "id": 2207,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 2197,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2196,
                                    "name": "managerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2175,
                                    "src": "3514:11:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3514:11:6"
                            }
                        ],
                        "name": "authorizeHubByManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2198,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3526:8:6"
                        },
                        "parameters": {
                            "id": 2195,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2194,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2207,
                                    "src": "3487:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2193,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3487:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3486:18:6"
                        },
                        "returnParameters": {
                            "id": 2199,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3535:0:6"
                        },
                        "scope": 2479,
                        "src": "3456:131:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2232,
                            "nodeType": "Block",
                            "src": "3665:131:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2225,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2214,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1917,
                                                        "src": "3675:14:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 2217,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2215,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2209,
                                                        "src": "3690:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3675:28:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 2218,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2216,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2211,
                                                    "src": "3704:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3675:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 2219,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "3675:51:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "-",
                                                    "prefix": true,
                                                    "src": "3734:2:6",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 2222,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3735:1:6",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_1_by_1",
                                                            "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                ],
                                                "id": 2221,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3729:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 2220,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3729:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 2224,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3729:8:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3675:62:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2226,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3675:62:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2228,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2209,
                                                "src": "3766:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2229,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2211,
                                                "src": "3780:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2227,
                                            "name": "HubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3669,
                                            "src": "3752:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2230,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3752:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2231,
                                    "nodeType": "EmitStatement",
                                    "src": "3747:42:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2233,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_authorizeHub",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2212,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2209,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2233,
                                    "src": "3616:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2208,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3616:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2211,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2233,
                                    "src": "3638:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2210,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3638:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3615:40:6"
                        },
                        "returnParameters": {
                            "id": 2213,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3665:0:6"
                        },
                        "scope": 2479,
                        "src": "3593:203:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3726
                        ],
                        "body": {
                            "id": 2249,
                            "nodeType": "Block",
                            "src": "3915:56:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2245,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2235,
                                                "src": "3941:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2246,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2237,
                                                "src": "3955:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2244,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2316,
                                            "src": "3925:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2247,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3925:39:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2248,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3925:39:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f48f8ac7",
                        "id": 2250,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 2241,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2235,
                                        "src": "3901:12:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 2242,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2240,
                                    "name": "ownerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2153,
                                    "src": "3891:9:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_address_$",
                                        "typeString": "modifier (address)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3891:23:6"
                            }
                        ],
                        "name": "unauthorizeHubByOwner",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2239,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3882:8:6"
                        },
                        "parameters": {
                            "id": 2238,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2235,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2250,
                                    "src": "3833:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2234,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3833:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2237,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2250,
                                    "src": "3855:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2236,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3855:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3832:40:6"
                        },
                        "returnParameters": {
                            "id": 2243,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3915:0:6"
                        },
                        "scope": 2479,
                        "src": "3802:169:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3731
                        ],
                        "body": {
                            "id": 2264,
                            "nodeType": "Block",
                            "src": "4058:54:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2259,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "4084:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2260,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4084:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2261,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2252,
                                                "src": "4096:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2258,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2316,
                                            "src": "4068:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2262,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4068:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2263,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4068:37:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f9bce311",
                        "id": 2265,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 2256,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2255,
                                    "name": "managerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2175,
                                    "src": "4046:11:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "4046:11:6"
                            }
                        ],
                        "name": "unauthorizeHubByManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2254,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4037:8:6"
                        },
                        "parameters": {
                            "id": 2253,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2252,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2265,
                                    "src": "4010:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2251,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4010:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4009:18:6"
                        },
                        "returnParameters": {
                            "id": 2257,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4058:0:6"
                        },
                        "scope": 2479,
                        "src": "3977:135:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2315,
                            "nodeType": "Block",
                            "src": "4192:356:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2273
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2273,
                                            "mutability": "mutable",
                                            "name": "hubInfo",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2315,
                                            "src": "4202:28:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                "typeString": "struct IStakeManager.RelayHubInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2272,
                                                "name": "RelayHubInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3689,
                                                "src": "4202:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2279,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2274,
                                                "name": "authorizedHubs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1917,
                                                "src": "4233:14:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                    "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                }
                                            },
                                            "id": 2276,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2275,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2267,
                                                "src": "4248:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4233:28:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                            }
                                        },
                                        "id": 2278,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2277,
                                            "name": "relayHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2269,
                                            "src": "4262:8:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4233:38:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                            "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4202:69:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2288,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2281,
                                                        "name": "hubInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2273,
                                                        "src": "4289:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                            "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2282,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "removalBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3688,
                                                    "src": "4289:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 2286,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "UnaryOperation",
                                                            "operator": "-",
                                                            "prefix": true,
                                                            "src": "4318:2:6",
                                                            "subExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "31",
                                                                "id": 2285,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4319:1:6",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_1_by_1",
                                                                    "typeString": "int_const 1"
                                                                },
                                                                "value": "1"
                                                            },
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_minus_1_by_1",
                                                                "typeString": "int_const -1"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_minus_1_by_1",
                                                                "typeString": "int_const -1"
                                                            }
                                                        ],
                                                        "id": 2284,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "4313:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 2283,
                                                            "name": "uint",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "4313:4:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 2287,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4313:8:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4289:32:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 2289,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4323:20:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 2280,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4281:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2290,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4281:63:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2291,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4281:63:6"
                                },
                                {
                                    "assignments": [
                                        2293
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2293,
                                            "mutability": "mutable",
                                            "name": "removalBlock",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2315,
                                            "src": "4354:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2292,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4354:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2302,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2297,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "4394:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2299,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2298,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2267,
                                                        "src": "4401:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4394:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2300,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3681,
                                                "src": "4394:33:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2294,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -4,
                                                    "src": "4377:5:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 2295,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "number",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4377:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2296,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6594,
                                            "src": "4377:16:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2301,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4377:51:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4354:74:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2307,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2303,
                                                "name": "hubInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2273,
                                                "src": "4438:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                }
                                            },
                                            "id": 2305,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "4438:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 2306,
                                            "name": "removalBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2293,
                                            "src": "4461:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4438:35:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2308,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4438:35:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2310,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2267,
                                                "src": "4504:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2311,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2269,
                                                "src": "4518:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2312,
                                                "name": "removalBlock",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2293,
                                                "src": "4528:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 2309,
                                            "name": "HubUnauthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3677,
                                            "src": "4488:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4488:53:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2314,
                                    "nodeType": "EmitStatement",
                                    "src": "4483:58:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2316,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_unauthorizeHub",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2267,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2316,
                                    "src": "4143:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2266,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4143:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2269,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2316,
                                    "src": "4165:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2268,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4165:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4142:40:6"
                        },
                        "returnParameters": {
                            "id": 2271,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4192:0:6"
                        },
                        "scope": 2479,
                        "src": "4118:430:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3744
                        ],
                        "body": {
                            "id": 2380,
                            "nodeType": "Block",
                            "src": "4722:466:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2331
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2331,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4732:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2330,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "4732:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2335,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2332,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "4757:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2334,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2333,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2318,
                                            "src": "4764:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4757:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4732:45:6"
                                },
                                {
                                    "assignments": [
                                        2337
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2337,
                                            "mutability": "mutable",
                                            "name": "isAmountSufficient",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4787:23:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2336,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4787:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2342,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2341,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2338,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4813:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2339,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "4813:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2340,
                                            "name": "minAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2322,
                                            "src": "4827:9:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4813:23:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4787:49:6"
                                },
                                {
                                    "assignments": [
                                        2344
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2344,
                                            "mutability": "mutable",
                                            "name": "isDelaySufficient",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4846:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2343,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4846:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2349,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2348,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2345,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4871:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2346,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3681,
                                            "src": "4871:17:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2347,
                                            "name": "minUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2324,
                                            "src": "4892:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4871:36:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4846:61:6"
                                },
                                {
                                    "assignments": [
                                        2351
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2351,
                                            "mutability": "mutable",
                                            "name": "isStakeLocked",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4917:18:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2350,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4917:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2356,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2355,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2352,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4938:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2353,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "withdrawBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3683,
                                            "src": "4938:18:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2354,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4960:1:6",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "4938:23:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4917:44:6"
                                },
                                {
                                    "assignments": [
                                        2358
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2358,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4971:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2357,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4971:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2371,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2370,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2359,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1917,
                                                        "src": "4994:14:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 2361,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2360,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2318,
                                                        "src": "5009:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4994:28:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 2363,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2362,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2320,
                                                    "src": "5023:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4994:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 2364,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "4994:51:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2368,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "-",
                                                    "prefix": true,
                                                    "src": "5054:2:6",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 2367,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "5055:1:6",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_1_by_1",
                                                            "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                ],
                                                "id": 2366,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5049:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 2365,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5049:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 2369,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5049:8:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4994:63:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4971:86:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 2378,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 2376,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 2374,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2372,
                                                    "name": "isAmountSufficient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2337,
                                                    "src": "5082:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2373,
                                                    "name": "isDelaySufficient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2344,
                                                    "src": "5112:17:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "5082:47:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "&&",
                                            "rightExpression": {
                                                "argumentTypes": null,
                                                "id": 2375,
                                                "name": "isStakeLocked",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2351,
                                                "src": "5141:13:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "5082:72:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2377,
                                            "name": "isHubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2358,
                                            "src": "5166:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "5082:99:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 2329,
                                    "id": 2379,
                                    "nodeType": "Return",
                                    "src": "5067:114:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "6de8dd41",
                        "id": 2381,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayManagerStaked",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2326,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4685:8:6"
                        },
                        "parameters": {
                            "id": 2325,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2318,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4584:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2317,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4584:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2320,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4606:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2319,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4606:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2322,
                                    "mutability": "mutable",
                                    "name": "minAmount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4624:17:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2321,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4624:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2324,
                                    "mutability": "mutable",
                                    "name": "minUnstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4643:23:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2323,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4643:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4583:84:6"
                        },
                        "returnParameters": {
                            "id": 2329,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2328,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4716:4:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 2327,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4716:4:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4715:6:6"
                        },
                        "scope": 2479,
                        "src": "4554:634:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3754
                        ],
                        "body": {
                            "id": 2477,
                            "nodeType": "Block",
                            "src": "5610:748:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2393
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2393,
                                            "mutability": "mutable",
                                            "name": "removalBlock",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "5620:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2392,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5620:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2401,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2394,
                                                    "name": "authorizedHubs",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1917,
                                                    "src": "5644:14:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                        "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                    }
                                                },
                                                "id": 2396,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2395,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2384,
                                                    "src": "5659:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5644:28:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                }
                                            },
                                            "id": 2399,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2397,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "5673:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2398,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "5673:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5644:40:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                            }
                                        },
                                        "id": 2400,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "removalBlock",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3688,
                                        "src": "5644:53:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5620:77:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2405,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2403,
                                                    "name": "removalBlock",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2393,
                                                    "src": "5715:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2404,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5731:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5715:17:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 2406,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5734:20:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 2402,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5707:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2407,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5707:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2408,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5707:48:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2413,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2410,
                                                    "name": "removalBlock",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2393,
                                                    "src": "5773:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2411,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "5788:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2412,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "5788:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5773:27:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "68756220617574686f72697a6174696f6e2065787069726564",
                                                "id": 2414,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5802:27:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                },
                                                "value": "hub authorization expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                }
                                            ],
                                            "id": 2409,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5765:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2415,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5765:65:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2416,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5765:65:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2423,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2418,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "5913:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 2420,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2419,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2384,
                                                            "src": "5920:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "5913:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 2421,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3679,
                                                    "src": "5913:26:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2422,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2388,
                                                    "src": "5943:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5913:36:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "70656e616c74792065786365656473207374616b65",
                                                "id": 2424,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5951:23:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                },
                                                "value": "penalty exceeds stake"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                }
                                            ],
                                            "id": 2417,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5905:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2425,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5905:70:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2426,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5905:70:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2439,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2427,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "5985:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 2429,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2428,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2384,
                                                    "src": "5992:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5985:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 2430,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "5985:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2433,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "6027:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 2435,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2434,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2384,
                                                            "src": "6034:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6027:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 2436,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3679,
                                                    "src": "6027:26:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2437,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2388,
                                                    "src": "6055:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2431,
                                                    "name": "SafeMath",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6761,
                                                    "src": "6014:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                        "typeString": "type(library SafeMath)"
                                                    }
                                                },
                                                "id": 2432,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6611,
                                                "src": "6014:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 2438,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6014:48:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5985:77:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2440,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5985:77:6"
                                },
                                {
                                    "assignments": [
                                        2442
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2442,
                                            "mutability": "mutable",
                                            "name": "toBurn",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "6073:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2441,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6073:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2448,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2445,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2388,
                                                "src": "6103:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "32",
                                                "id": 2446,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6111:1:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                },
                                                "value": "2"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2443,
                                                "name": "SafeMath",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6761,
                                                "src": "6090:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                    "typeString": "type(library SafeMath)"
                                                }
                                            },
                                            "id": 2444,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "div",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6691,
                                            "src": "6090:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2447,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6090:23:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6073:40:6"
                                },
                                {
                                    "assignments": [
                                        2450
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2450,
                                            "mutability": "mutable",
                                            "name": "reward",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "6123:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2449,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6123:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2456,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2453,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2388,
                                                "src": "6153:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2454,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2442,
                                                "src": "6161:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2451,
                                                "name": "SafeMath",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6761,
                                                "src": "6140:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                    "typeString": "type(library SafeMath)"
                                                }
                                            },
                                            "id": 2452,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sub",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6611,
                                            "src": "6140:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2455,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6140:28:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6123:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2462,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2442,
                                                "src": "6242:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "30",
                                                        "id": 2459,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "6230:1:6",
                                                        "subdenomination": null,
                                                        "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": 2458,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6222:7:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2457,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6222:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2460,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6222:10:6",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2461,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6222:19:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2463,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6222:27:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2464,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6222:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2468,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2450,
                                                "src": "6280:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2465,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2386,
                                                "src": "6259:11:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2467,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6259:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2469,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6259:28:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2470,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6259:28:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2472,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2384,
                                                "src": "6317:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2473,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2386,
                                                "src": "6331:11:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2474,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2450,
                                                "src": "6344:6:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2471,
                                            "name": "StakePenalized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3663,
                                            "src": "6302:14:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2475,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6302:49:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2476,
                                    "nodeType": "EmitStatement",
                                    "src": "6297:54:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2382,
                            "nodeType": "StructuredDocumentation",
                            "src": "5194:296:6",
                            "text": "Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns half of stake on the way.\n @param relayManager - entry to penalize\n @param beneficiary - address that receives half of the penalty amount\n @param amount - amount to withdraw from stake"
                        },
                        "functionSelector": "09a08af4",
                        "id": 2478,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2390,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5601:8:6"
                        },
                        "parameters": {
                            "id": 2389,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2384,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5525:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2383,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5525:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2386,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5547:27:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 2385,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5547:15:6",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2388,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5576:14:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2387,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5576:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5524:67:6"
                        },
                        "returnParameters": {
                            "id": 2391,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5610:0:6"
                        },
                        "scope": 2479,
                        "src": "5495:863:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 2480,
                "src": "185:6175:6"
            }
        ],
        "src": "31:6330:6"
    },
    "legacyAST": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/StakeManager.sol",
        "exportedSymbols": {
            "StakeManager": [
                2479
            ]
        },
        "id": 2480,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 1880,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:6"
            },
            {
                "id": 1881,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:6"
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "@openzeppelin/contracts/math/SafeMath.sol",
                "id": 1882,
                "nodeType": "ImportDirective",
                "scope": 2480,
                "sourceUnit": 6762,
                "src": "90:51:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 1883,
                "nodeType": "ImportDirective",
                "scope": 2480,
                "sourceUnit": 3768,
                "src": "143:40:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 1884,
                            "name": "IStakeManager",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3767,
                            "src": "210:13:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "id": 1885,
                        "nodeType": "InheritanceSpecifier",
                        "src": "210:13:6"
                    }
                ],
                "contractDependencies": [
                    3767
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 2479,
                "linearizedBaseContracts": [
                    2479,
                    3767
                ],
                "name": "StakeManager",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 1888,
                        "libraryName": {
                            "contractScope": null,
                            "id": 1886,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6761,
                            "src": "236:8:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$6761",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "230:27:6",
                        "typeName": {
                            "id": 1887,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "249:7:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            3766
                        ],
                        "constant": false,
                        "functionSelector": "47116c6e",
                        "id": 1892,
                        "mutability": "mutable",
                        "name": "versionSM",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 1890,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "277:8:6"
                        },
                        "scope": 2479,
                        "src": "263:77:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 1889,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "263:6:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e7374616b656d616e616765722e697374616b656d616e61676572",
                            "id": 1891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "298:42:6",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_89fa7318ce3e46b2742b6b9f12ca0e926d2c574778a6383c25e75f654f2a36cc",
                                "typeString": "literal_string \"2.0.0+opengsn.stakemanager.istakemanager\""
                            },
                            "value": "2.0.0+opengsn.stakemanager.istakemanager"
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 1893,
                            "nodeType": "StructuredDocumentation",
                            "src": "347:39:6",
                            "text": "maps relay managers to their stakes"
                        },
                        "functionSelector": "16934fc4",
                        "id": 1897,
                        "mutability": "mutable",
                        "name": "stakes",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "391:43:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                            "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                        },
                        "typeName": {
                            "id": 1896,
                            "keyType": {
                                "id": 1894,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "399:7:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "391:29:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                "typeString": "mapping(address => struct IStakeManager.StakeInfo)"
                            },
                            "valueType": {
                                "contractScope": null,
                                "id": 1895,
                                "name": "StakeInfo",
                                "nodeType": "UserDefinedTypeName",
                                "referencedDeclaration": 3686,
                                "src": "410:9:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                    "typeString": "struct IStakeManager.StakeInfo"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3761
                        ],
                        "body": {
                            "id": 1909,
                            "nodeType": "Block",
                            "src": "544:44:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1905,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "561:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 1907,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 1906,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1899,
                                            "src": "568:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "561:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 1904,
                                    "id": 1908,
                                    "nodeType": "Return",
                                    "src": "554:27:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c3453153",
                        "id": 1910,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1901,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "493:8:6"
                        },
                        "parameters": {
                            "id": 1900,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1899,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1910,
                                    "src": "462:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1898,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "462:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "461:22:6"
                        },
                        "returnParameters": {
                            "id": 1904,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1903,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1910,
                                    "src": "516:26:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1902,
                                        "name": "StakeInfo",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3686,
                                        "src": "516:9:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "515:28:6"
                        },
                        "scope": 2479,
                        "src": "440:148:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "constant": false,
                        "documentation": {
                            "id": 1911,
                            "nodeType": "StructuredDocumentation",
                            "src": "594:101:6",
                            "text": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
                        },
                        "functionSelector": "7aeb642a",
                        "id": 1917,
                        "mutability": "mutable",
                        "name": "authorizedHubs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "700:74:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                        },
                        "typeName": {
                            "id": 1916,
                            "keyType": {
                                "id": 1912,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "708:7:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "700:52:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo))"
                            },
                            "valueType": {
                                "id": 1915,
                                "keyType": {
                                    "id": 1913,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "727:7:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "719:32:6",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo)"
                                },
                                "valueType": {
                                    "contractScope": null,
                                    "id": 1914,
                                    "name": "RelayHubInfo",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3689,
                                    "src": "738:12:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                        "typeString": "struct IStakeManager.RelayHubInfo"
                                    }
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3697
                        ],
                        "body": {
                            "id": 2018,
                            "nodeType": "Block",
                            "src": "1356:690:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 1943,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    },
                                                    "id": 1935,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1927,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1897,
                                                                "src": "1374:6:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 1929,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1928,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1920,
                                                                "src": "1381:12:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "1374:20:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 1930,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "owner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3685,
                                                        "src": "1374:26:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "hexValue": "30",
                                                                "id": 1933,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "1412:1:6",
                                                                "subdenomination": null,
                                                                "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": 1932,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "1404:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                                "id": 1931,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "1404:7:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": null,
                                                                    "typeString": null
                                                                }
                                                            }
                                                        },
                                                        "id": 1934,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "1404:10:6",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "src": "1374:40:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "||",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    },
                                                    "id": 1942,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1936,
                                                                "name": "stakes",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1897,
                                                                "src": "1418:6:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                                }
                                                            },
                                                            "id": 1938,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1937,
                                                                "name": "relayManager",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1920,
                                                                "src": "1425:12:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "1418:20:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                            }
                                                        },
                                                        "id": 1939,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "owner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3685,
                                                        "src": "1418:26:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1940,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "1448:3:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1941,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "1448:10:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "src": "1418:40:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "1374:84:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 1944,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1460:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 1926,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1366:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1945,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1366:106:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1946,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1366:106:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1953,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1948,
                                                    "name": "unstakeDelay",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1922,
                                                    "src": "1490:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1949,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "1506:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 1951,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1950,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1920,
                                                            "src": "1513:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "1506:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 1952,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3681,
                                                    "src": "1506:33:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "1490:49:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e7374616b6544656c61792063616e6e6f7420626520646563726561736564",
                                                "id": 1954,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1541:34:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                },
                                                "value": "unstakeDelay cannot be decreased"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_749d5bbd53bace98ba14f95790d5ecf9e4e76bab2242c078da371e573b111366",
                                                    "typeString": "literal_string \"unstakeDelay cannot be decreased\""
                                                }
                                            ],
                                            "id": 1947,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1482:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1955,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1482:94:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1956,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1482:94:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1961,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1958,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "1594:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1959,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1594:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1960,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1608:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "1594:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c61794d616e616765722063616e6e6f74207374616b6520666f7220697473656c66",
                                                "id": 1962,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1622:38:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eef05cddcc6711e1883f4d767944f6894528cad013bd13ea620e6a3c137af2cb",
                                                    "typeString": "literal_string \"relayManager cannot stake for itself\""
                                                },
                                                "value": "relayManager cannot stake for itself"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eef05cddcc6711e1883f4d767944f6894528cad013bd13ea620e6a3c137af2cb",
                                                    "typeString": "literal_string \"relayManager cannot stake for itself\""
                                                }
                                            ],
                                            "id": 1957,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1586:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1963,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1586:75:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1964,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1586:75:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 1975,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1966,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "1679:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 1969,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1967,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "1686:3:6",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1968,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "1686:10:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "1679:18:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 1970,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "1679:24:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1973,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1715:1:6",
                                                            "subdenomination": null,
                                                            "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": 1972,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1707:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1971,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1707:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1974,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1707:10:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "1679:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "73656e64657220697320612072656c61794d616e6167657220697473656c66",
                                                "id": 1976,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1719:33:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_763b6ed597bcb569038eba65de116a04cfc859676c1cd487949c085a78205d20",
                                                    "typeString": "literal_string \"sender is a relayManager itself\""
                                                },
                                                "value": "sender is a relayManager itself"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_763b6ed597bcb569038eba65de116a04cfc859676c1cd487949c085a78205d20",
                                                    "typeString": "literal_string \"sender is a relayManager itself\""
                                                }
                                            ],
                                            "id": 1965,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1671:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1671:82:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1978,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1671:82:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1985,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1979,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1763:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1981,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1980,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1770:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1763:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1982,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "owner",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3685,
                                            "src": "1763:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1983,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "1792:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 1984,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1792:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "src": "1763:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "id": 1986,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1763:39:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1993,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1987,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1812:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1989,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1988,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1819:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1812:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1990,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "1812:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1991,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "1842:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 1992,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "value",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "1842:9:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1812:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1994,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1812:39:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2000,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1995,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "1861:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 1997,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1996,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1920,
                                                    "src": "1868:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "1861:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 1998,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3681,
                                            "src": "1861:33:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 1999,
                                            "name": "unstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1922,
                                            "src": "1897:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1861:48:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2001,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1861:48:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2003,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1920,
                                                "src": "1935:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2004,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "1949:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2006,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2005,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "1956:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1949:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2007,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "owner",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3685,
                                                "src": "1949:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2008,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "1977:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2010,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2009,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "1984:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "1977:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2011,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3679,
                                                "src": "1977:26:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2012,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "2005:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2014,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2013,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1920,
                                                        "src": "2012:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2005:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2015,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3681,
                                                "src": "2005:33:6",
                                                "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"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 2002,
                                            "name": "StakeAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3636,
                                            "src": "1924:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256,uint256)"
                                            }
                                        },
                                        "id": 2016,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1924:115:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2017,
                                    "nodeType": "EmitStatement",
                                    "src": "1919:120:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1918,
                            "nodeType": "StructuredDocumentation",
                            "src": "781:475:6",
                            "text": "Put a stake for a relayManager and set its unstake delay.\n If the entry does not exist, it is created, and the caller of this function becomes its owner.\n If the entry already exists, only the owner can call this function.\n @param relayManager - address that represents a stake entry and controls relay registrations on relay hubs\n @param unstakeDelay - number of blocks to elapse before the owner can retrieve the stake after calling 'unlock'"
                        },
                        "functionSelector": "5d2fb768",
                        "id": 2019,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "stakeForAddress",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1924,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1339:8:6"
                        },
                        "parameters": {
                            "id": 1923,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1920,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2019,
                                    "src": "1286:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1919,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1286:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1922,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2019,
                                    "src": "1308:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1921,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1308:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1285:44:6"
                        },
                        "returnParameters": {
                            "id": 1925,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1356:0:6"
                        },
                        "scope": 2479,
                        "src": "1261:785:6",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3702
                        ],
                        "body": {
                            "id": 2067,
                            "nodeType": "Block",
                            "src": "2113:319:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2026
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2026,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2067,
                                            "src": "2123:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2025,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "2123:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2030,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2027,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "2148:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2029,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2028,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2021,
                                            "src": "2155:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "2148:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2123:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2036,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2032,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2186:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2033,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "2186:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2034,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "2200:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2035,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2200:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2186:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2037,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2212:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2031,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2178:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2038,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2178:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2039,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2178:46:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2044,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2041,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2242:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2042,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2242:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2043,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2264:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2242:23:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "616c72656164792070656e64696e67",
                                                "id": 2045,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2267:17:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                },
                                                "value": "already pending"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_3d5ba8f9dacf92169ef29c031ef5f7de7dc5c46d1c2ce428a52e8c4e934a46c0",
                                                    "typeString": "literal_string \"already pending\""
                                                }
                                            ],
                                            "id": 2040,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2234:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2046,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2234:51:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2047,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2234:51:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2048,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2026,
                                                "src": "2295:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2050,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "withdrawBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3683,
                                            "src": "2295:18:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2054,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2026,
                                                        "src": "2333:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2055,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "unstakeDelay",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3681,
                                                    "src": "2333:17:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2051,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "2316:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2052,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2316:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 2053,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "2316:16:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 2056,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2316:35:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2295:56:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2295:56:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2060,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2021,
                                                "src": "2380:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2061,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2394:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2062,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2394:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2063,
                                                    "name": "info",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2026,
                                                    "src": "2406:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                    }
                                                },
                                                "id": 2064,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "withdrawBlock",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3683,
                                                "src": "2406:18:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2059,
                                            "name": "StakeUnlocked",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3645,
                                            "src": "2366:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2366:59:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2066,
                                    "nodeType": "EmitStatement",
                                    "src": "2361:64:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "4a1ce599",
                        "id": 2068,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unlockStake",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2023,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2104:8:6"
                        },
                        "parameters": {
                            "id": 2022,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2021,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2068,
                                    "src": "2073:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2020,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2073:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2072:22:6"
                        },
                        "returnParameters": {
                            "id": 2024,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2113:0:6"
                        },
                        "scope": 2479,
                        "src": "2052:380:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3707
                        ],
                        "body": {
                            "id": 2131,
                            "nodeType": "Block",
                            "src": "2501:442:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2075
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2075,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2131,
                                            "src": "2511:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2074,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "2511:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2079,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2076,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "2536:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2078,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2077,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2070,
                                            "src": "2543:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "2536:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2511:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2085,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2081,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2574:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2082,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "2574:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2083,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "2588:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2084,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2588:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "2574:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2086,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2600:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2080,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2566:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2087,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2566:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2088,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2566:46:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2093,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2090,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2630:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2091,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2630:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2092,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2651:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2630:22:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5769746864726177616c206973206e6f74207363686564756c6564",
                                                "id": 2094,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2654:29:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                },
                                                "value": "Withdrawal is not scheduled"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_860678e036832132a2f62fd25edcf808e758d18c8e491de65f9720ad20186939",
                                                    "typeString": "literal_string \"Withdrawal is not scheduled\""
                                                }
                                            ],
                                            "id": 2089,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2622:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2095,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2622:62:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2096,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2622:62:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2102,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2098,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2075,
                                                        "src": "2702:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2099,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "withdrawBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3683,
                                                    "src": "2702:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2100,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "2724:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2101,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "2724:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2702:34:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5769746864726177616c206973206e6f7420647565",
                                                "id": 2103,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2738:23:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                },
                                                "value": "Withdrawal is not due"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_46cbffc6f5f26c20016abce85a0f05559724f8ec834b994ca7d9b2a2d9539ce2",
                                                    "typeString": "literal_string \"Withdrawal is not due\""
                                                }
                                            ],
                                            "id": 2097,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2694:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2104,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2694:68:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2105,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2694:68:6"
                                },
                                {
                                    "assignments": [
                                        2107
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2107,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2131,
                                            "src": "2772:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2106,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2772:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2110,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 2108,
                                            "name": "info",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2075,
                                            "src": "2789:4:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                            }
                                        },
                                        "id": 2109,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "stake",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3679,
                                        "src": "2789:10:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2772:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2114,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "delete",
                                        "prefix": true,
                                        "src": "2809:27:6",
                                        "subExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2111,
                                                "name": "stakes",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1897,
                                                "src": "2816:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                }
                                            },
                                            "id": 2113,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2112,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2070,
                                                "src": "2823:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2816:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                "typeString": "struct IStakeManager.StakeInfo storage ref"
                                            }
                                        },
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2115,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2809:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2121,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2107,
                                                "src": "2866:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2116,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2846:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2119,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2846:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2120,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "2846:19:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2122,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2846:27:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2123,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2846:27:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2125,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2070,
                                                "src": "2903:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2126,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2917:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2127,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2917:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2128,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2107,
                                                "src": "2929:6:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2124,
                                            "name": "StakeWithdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3654,
                                            "src": "2888:14:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2129,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2888:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2130,
                                    "nodeType": "EmitStatement",
                                    "src": "2883:53:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c23a5cea",
                        "id": 2132,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawStake",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2072,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2492:8:6"
                        },
                        "parameters": {
                            "id": 2071,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2070,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2132,
                                    "src": "2461:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2069,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2461:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2460:22:6"
                        },
                        "returnParameters": {
                            "id": 2073,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2501:0:6"
                        },
                        "scope": 2479,
                        "src": "2438:505:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2152,
                            "nodeType": "Block",
                            "src": "2991:129:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2137
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2137,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2152,
                                            "src": "3001:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2136,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "3001:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2141,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2138,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "3026:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2140,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2139,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2134,
                                            "src": "3033:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3026:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3001:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2147,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2143,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2137,
                                                        "src": "3064:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2144,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "3064:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2145,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "3078:3:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 2146,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "3078:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3064:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206f776e6572",
                                                "id": 2148,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3090:11:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                },
                                                "value": "not owner"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_f2881edc58d5a08d0243d7f8afdab31d949d85825e628e4b88558657a031f74e",
                                                    "typeString": "literal_string \"not owner\""
                                                }
                                            ],
                                            "id": 2142,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3056:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2149,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3056:46:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2150,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3056:46:6"
                                },
                                {
                                    "id": 2151,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "3112:1:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2153,
                        "name": "ownerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2135,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2134,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2153,
                                    "src": "2969:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2133,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2969:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2968:22:6"
                        },
                        "src": "2949:171:6",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 2174,
                            "nodeType": "Block",
                            "src": "3150:129:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2156
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2156,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2174,
                                            "src": "3160:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2155,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "3160:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2161,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2157,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "3185:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2160,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2158,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "3192:3:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                }
                                            },
                                            "id": 2159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3192:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3185:18:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3160:43:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 2169,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2163,
                                                        "name": "info",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2156,
                                                        "src": "3221:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                            "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2164,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "owner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3685,
                                                    "src": "3221:10:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 2167,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3243:1:6",
                                                            "subdenomination": null,
                                                            "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": 2166,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "3235:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 2165,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "3235:7:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 2168,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3235:10:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "3221:24:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f74206d616e61676572",
                                                "id": 2170,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3247:13:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                },
                                                "value": "not manager"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ee7b04b266f275ae66a2fddcbfef24d4ec3a503d9843c534a382f12477498d38",
                                                    "typeString": "literal_string \"not manager\""
                                                }
                                            ],
                                            "id": 2162,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3213:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2171,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3213:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2172,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3213:48:6"
                                },
                                {
                                    "id": 2173,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "3271:1:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2175,
                        "name": "managerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2154,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3147:2:6"
                        },
                        "src": "3126:153:6",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3714
                        ],
                        "body": {
                            "id": 2191,
                            "nodeType": "Block",
                            "src": "3396:54:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2187,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2177,
                                                "src": "3420:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2188,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2179,
                                                "src": "3434:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2186,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2233,
                                            "src": "3406:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2189,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3406:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2190,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3406:37:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "7835d296",
                        "id": 2192,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 2182,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2177,
                                        "src": "3373:12:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 2183,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2181,
                                    "name": "ownerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2153,
                                    "src": "3363:9:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_address_$",
                                        "typeString": "modifier (address)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3363:23:6"
                            }
                        ],
                        "name": "authorizeHubByOwner",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2184,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3387:8:6"
                        },
                        "parameters": {
                            "id": 2180,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2177,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2192,
                                    "src": "3314:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2176,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3314:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2179,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2192,
                                    "src": "3336:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2178,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3336:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3313:40:6"
                        },
                        "returnParameters": {
                            "id": 2185,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3396:0:6"
                        },
                        "scope": 2479,
                        "src": "3285:165:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3719
                        ],
                        "body": {
                            "id": 2206,
                            "nodeType": "Block",
                            "src": "3535:52:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2201,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "3559:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2202,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "3559:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2203,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2194,
                                                "src": "3571:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2200,
                                            "name": "_authorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2233,
                                            "src": "3545:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2204,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3545:35:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2205,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3545:35:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d48a9d43",
                        "id": 2207,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 2197,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2196,
                                    "name": "managerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2175,
                                    "src": "3514:11:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3514:11:6"
                            }
                        ],
                        "name": "authorizeHubByManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2198,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3526:8:6"
                        },
                        "parameters": {
                            "id": 2195,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2194,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2207,
                                    "src": "3487:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2193,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3487:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3486:18:6"
                        },
                        "returnParameters": {
                            "id": 2199,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3535:0:6"
                        },
                        "scope": 2479,
                        "src": "3456:131:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2232,
                            "nodeType": "Block",
                            "src": "3665:131:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2225,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2214,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1917,
                                                        "src": "3675:14:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 2217,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2215,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2209,
                                                        "src": "3690:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3675:28:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 2218,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2216,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2211,
                                                    "src": "3704:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3675:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 2219,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "3675:51:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "-",
                                                    "prefix": true,
                                                    "src": "3734:2:6",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 2222,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3735:1:6",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_1_by_1",
                                                            "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                ],
                                                "id": 2221,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3729:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 2220,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3729:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 2224,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3729:8:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3675:62:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2226,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3675:62:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2228,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2209,
                                                "src": "3766:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2229,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2211,
                                                "src": "3780:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2227,
                                            "name": "HubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3669,
                                            "src": "3752:13:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2230,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3752:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2231,
                                    "nodeType": "EmitStatement",
                                    "src": "3747:42:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2233,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_authorizeHub",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2212,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2209,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2233,
                                    "src": "3616:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2208,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3616:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2211,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2233,
                                    "src": "3638:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2210,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3638:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3615:40:6"
                        },
                        "returnParameters": {
                            "id": 2213,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3665:0:6"
                        },
                        "scope": 2479,
                        "src": "3593:203:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3726
                        ],
                        "body": {
                            "id": 2249,
                            "nodeType": "Block",
                            "src": "3915:56:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2245,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2235,
                                                "src": "3941:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2246,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2237,
                                                "src": "3955:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2244,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2316,
                                            "src": "3925:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2247,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3925:39:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2248,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3925:39:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f48f8ac7",
                        "id": 2250,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "argumentTypes": null,
                                        "id": 2241,
                                        "name": "relayManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2235,
                                        "src": "3901:12:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    }
                                ],
                                "id": 2242,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2240,
                                    "name": "ownerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2153,
                                    "src": "3891:9:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$_t_address_$",
                                        "typeString": "modifier (address)"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "3891:23:6"
                            }
                        ],
                        "name": "unauthorizeHubByOwner",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2239,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3882:8:6"
                        },
                        "parameters": {
                            "id": 2238,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2235,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2250,
                                    "src": "3833:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2234,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3833:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2237,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2250,
                                    "src": "3855:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2236,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3855:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3832:40:6"
                        },
                        "returnParameters": {
                            "id": 2243,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3915:0:6"
                        },
                        "scope": 2479,
                        "src": "3802:169:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3731
                        ],
                        "body": {
                            "id": 2264,
                            "nodeType": "Block",
                            "src": "4058:54:6",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2259,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "4084:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2260,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4084:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2261,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2252,
                                                "src": "4096:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 2258,
                                            "name": "_unauthorizeHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2316,
                                            "src": "4068:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                                                "typeString": "function (address,address)"
                                            }
                                        },
                                        "id": 2262,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4068:37:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2263,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4068:37:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "f9bce311",
                        "id": 2265,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 2256,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 2255,
                                    "name": "managerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2175,
                                    "src": "4046:11:6",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "4046:11:6"
                            }
                        ],
                        "name": "unauthorizeHubByManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2254,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4037:8:6"
                        },
                        "parameters": {
                            "id": 2253,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2252,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2265,
                                    "src": "4010:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2251,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4010:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4009:18:6"
                        },
                        "returnParameters": {
                            "id": 2257,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4058:0:6"
                        },
                        "scope": 2479,
                        "src": "3977:135:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2315,
                            "nodeType": "Block",
                            "src": "4192:356:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2273
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2273,
                                            "mutability": "mutable",
                                            "name": "hubInfo",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2315,
                                            "src": "4202:28:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                "typeString": "struct IStakeManager.RelayHubInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2272,
                                                "name": "RelayHubInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3689,
                                                "src": "4202:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2279,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 2274,
                                                "name": "authorizedHubs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1917,
                                                "src": "4233:14:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                    "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                }
                                            },
                                            "id": 2276,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 2275,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2267,
                                                "src": "4248:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4233:28:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                            }
                                        },
                                        "id": 2278,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2277,
                                            "name": "relayHub",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2269,
                                            "src": "4262:8:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4233:38:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                            "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4202:69:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2288,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2281,
                                                        "name": "hubInfo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2273,
                                                        "src": "4289:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                            "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                        }
                                                    },
                                                    "id": 2282,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "removalBlock",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3688,
                                                    "src": "4289:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 2286,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "UnaryOperation",
                                                            "operator": "-",
                                                            "prefix": true,
                                                            "src": "4318:2:6",
                                                            "subExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "31",
                                                                "id": 2285,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4319:1:6",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_1_by_1",
                                                                    "typeString": "int_const 1"
                                                                },
                                                                "value": "1"
                                                            },
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_minus_1_by_1",
                                                                "typeString": "int_const -1"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_minus_1_by_1",
                                                                "typeString": "int_const -1"
                                                            }
                                                        ],
                                                        "id": 2284,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "4313:4:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                            "id": 2283,
                                                            "name": "uint",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "4313:4:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 2287,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4313:8:6",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4289:32:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 2289,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4323:20:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 2280,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4281:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2290,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4281:63:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2291,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4281:63:6"
                                },
                                {
                                    "assignments": [
                                        2293
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2293,
                                            "mutability": "mutable",
                                            "name": "removalBlock",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2315,
                                            "src": "4354:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2292,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4354:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2302,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2297,
                                                        "name": "stakes",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1897,
                                                        "src": "4394:6:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                            "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                        }
                                                    },
                                                    "id": 2299,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2298,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2267,
                                                        "src": "4401:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4394:20:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                        "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                    }
                                                },
                                                "id": 2300,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "unstakeDelay",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3681,
                                                "src": "4394:33:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2294,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -4,
                                                    "src": "4377:5:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                    }
                                                },
                                                "id": 2295,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "number",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "4377:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2296,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6594,
                                            "src": "4377:16:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2301,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4377:51:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4354:74:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2307,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2303,
                                                "name": "hubInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2273,
                                                "src": "4438:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage_ptr",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage pointer"
                                                }
                                            },
                                            "id": 2305,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "4438:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 2306,
                                            "name": "removalBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2293,
                                            "src": "4461:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4438:35:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2308,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4438:35:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2310,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2267,
                                                "src": "4504:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2311,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2269,
                                                "src": "4518:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2312,
                                                "name": "removalBlock",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2293,
                                                "src": "4528:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 2309,
                                            "name": "HubUnauthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3677,
                                            "src": "4488:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4488:53:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2314,
                                    "nodeType": "EmitStatement",
                                    "src": "4483:58:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 2316,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_unauthorizeHub",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 2270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2267,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2316,
                                    "src": "4143:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2266,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4143:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2269,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2316,
                                    "src": "4165:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2268,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4165:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4142:40:6"
                        },
                        "returnParameters": {
                            "id": 2271,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4192:0:6"
                        },
                        "scope": 2479,
                        "src": "4118:430:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3744
                        ],
                        "body": {
                            "id": 2380,
                            "nodeType": "Block",
                            "src": "4722:466:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2331
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2331,
                                            "mutability": "mutable",
                                            "name": "info",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4732:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "storage",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 2330,
                                                "name": "StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "4732:9:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2335,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2332,
                                            "name": "stakes",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1897,
                                            "src": "4757:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                            }
                                        },
                                        "id": 2334,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2333,
                                            "name": "relayManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2318,
                                            "src": "4764:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4757:20:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4732:45:6"
                                },
                                {
                                    "assignments": [
                                        2337
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2337,
                                            "mutability": "mutable",
                                            "name": "isAmountSufficient",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4787:23:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2336,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4787:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2342,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2341,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2338,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4813:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2339,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "4813:10:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2340,
                                            "name": "minAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2322,
                                            "src": "4827:9:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4813:23:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4787:49:6"
                                },
                                {
                                    "assignments": [
                                        2344
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2344,
                                            "mutability": "mutable",
                                            "name": "isDelaySufficient",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4846:22:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2343,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4846:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2349,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2348,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2345,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4871:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2346,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "unstakeDelay",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3681,
                                            "src": "4871:17:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">=",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2347,
                                            "name": "minUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2324,
                                            "src": "4892:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4871:36:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4846:61:6"
                                },
                                {
                                    "assignments": [
                                        2351
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2351,
                                            "mutability": "mutable",
                                            "name": "isStakeLocked",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4917:18:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2350,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4917:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2356,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2355,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2352,
                                                "name": "info",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2331,
                                                "src": "4938:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo storage pointer"
                                                }
                                            },
                                            "id": 2353,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "withdrawBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3683,
                                            "src": "4938:18:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 2354,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4960:1:6",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "src": "4938:23:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4917:44:6"
                                },
                                {
                                    "assignments": [
                                        2358
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2358,
                                            "mutability": "mutable",
                                            "name": "isHubAuthorized",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2380,
                                            "src": "4971:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "typeName": {
                                                "id": 2357,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4971:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2371,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 2370,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2359,
                                                        "name": "authorizedHubs",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1917,
                                                        "src": "4994:14:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                            "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                        }
                                                    },
                                                    "id": 2361,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 2360,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 2318,
                                                        "src": "5009:12:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "4994:28:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                    }
                                                },
                                                "id": 2363,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2362,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2320,
                                                    "src": "5023:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4994:38:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                    "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                                }
                                            },
                                            "id": 2364,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "removalBlock",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3688,
                                            "src": "4994:51:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2368,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "-",
                                                    "prefix": true,
                                                    "src": "5054:2:6",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 2367,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "5055:1:6",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_1_by_1",
                                                            "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_minus_1_by_1",
                                                        "typeString": "int_const -1"
                                                    }
                                                ],
                                                "id": 2366,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5049:4:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 2365,
                                                    "name": "uint",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5049:4:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                    }
                                                }
                                            },
                                            "id": 2369,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5049:8:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4994:63:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4971:86:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 2378,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            },
                                            "id": 2376,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 2374,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2372,
                                                    "name": "isAmountSufficient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2337,
                                                    "src": "5082:18:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2373,
                                                    "name": "isDelaySufficient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2344,
                                                    "src": "5112:17:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "5082:47:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "&&",
                                            "rightExpression": {
                                                "argumentTypes": null,
                                                "id": 2375,
                                                "name": "isStakeLocked",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2351,
                                                "src": "5141:13:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "src": "5082:72:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 2377,
                                            "name": "isHubAuthorized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2358,
                                            "src": "5166:15:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "5082:99:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 2329,
                                    "id": 2379,
                                    "nodeType": "Return",
                                    "src": "5067:114:6"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "6de8dd41",
                        "id": 2381,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayManagerStaked",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2326,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4685:8:6"
                        },
                        "parameters": {
                            "id": 2325,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2318,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4584:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2317,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4584:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2320,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4606:16:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2319,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4606:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2322,
                                    "mutability": "mutable",
                                    "name": "minAmount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4624:17:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2321,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4624:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2324,
                                    "mutability": "mutable",
                                    "name": "minUnstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4643:23:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2323,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4643:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4583:84:6"
                        },
                        "returnParameters": {
                            "id": 2329,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2328,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2381,
                                    "src": "4716:4:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 2327,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4716:4:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4715:6:6"
                        },
                        "scope": 2479,
                        "src": "4554:634:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3754
                        ],
                        "body": {
                            "id": 2477,
                            "nodeType": "Block",
                            "src": "5610:748:6",
                            "statements": [
                                {
                                    "assignments": [
                                        2393
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2393,
                                            "mutability": "mutable",
                                            "name": "removalBlock",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "5620:20:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2392,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5620:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2401,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2394,
                                                    "name": "authorizedHubs",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1917,
                                                    "src": "5644:14:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$_$",
                                                        "typeString": "mapping(address => mapping(address => struct IStakeManager.RelayHubInfo storage ref))"
                                                    }
                                                },
                                                "id": 2396,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2395,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2384,
                                                    "src": "5659:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5644:28:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_RelayHubInfo_$3689_storage_$",
                                                    "typeString": "mapping(address => struct IStakeManager.RelayHubInfo storage ref)"
                                                }
                                            },
                                            "id": 2399,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2397,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "5673:3:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 2398,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "5673:10:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5644:40:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayHubInfo_$3689_storage",
                                                "typeString": "struct IStakeManager.RelayHubInfo storage ref"
                                            }
                                        },
                                        "id": 2400,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "removalBlock",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3688,
                                        "src": "5644:53:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5620:77:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2405,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2403,
                                                    "name": "removalBlock",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2393,
                                                    "src": "5715:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 2404,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5731:1:6",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "5715:17:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "687562206e6f7420617574686f72697a6564",
                                                "id": 2406,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5734:20:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                },
                                                "value": "hub not authorized"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_833b11fcdf7eb617a5e8e51044818470f61ce1793663032dc99c31429f81a19f",
                                                    "typeString": "literal_string \"hub not authorized\""
                                                }
                                            ],
                                            "id": 2402,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5707:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2407,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5707:48:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2408,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5707:48:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2413,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2410,
                                                    "name": "removalBlock",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2393,
                                                    "src": "5773:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 2411,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "5788:5:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 2412,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "number",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "5788:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5773:27:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "68756220617574686f72697a6174696f6e2065787069726564",
                                                "id": 2414,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5802:27:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                },
                                                "value": "hub authorization expired"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5a90317ad5eb065da8284e8902c4393ff73ad0f286b027487eb55a338442c023",
                                                    "typeString": "literal_string \"hub authorization expired\""
                                                }
                                            ],
                                            "id": 2409,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5765:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2415,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5765:65:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2416,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5765:65:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 2423,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2418,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "5913:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 2420,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2419,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2384,
                                                            "src": "5920:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "5913:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 2421,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3679,
                                                    "src": "5913:26:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2422,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2388,
                                                    "src": "5943:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5913:36:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "70656e616c74792065786365656473207374616b65",
                                                "id": 2424,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5951:23:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                },
                                                "value": "penalty exceeds stake"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c65b35d1a6ad66cabf69e4201547cf2b95ef7d46f8c643c825a1657c98b3e5c6",
                                                    "typeString": "literal_string \"penalty exceeds stake\""
                                                }
                                            ],
                                            "id": 2417,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5905:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 2425,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5905:70:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2426,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5905:70:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 2439,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2427,
                                                    "name": "stakes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1897,
                                                    "src": "5985:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                        "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                    }
                                                },
                                                "id": 2429,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 2428,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2384,
                                                    "src": "5992:12:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "5985:20:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                    "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                }
                                            },
                                            "id": 2430,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "stake",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3679,
                                            "src": "5985:26:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2433,
                                                            "name": "stakes",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1897,
                                                            "src": "6027:6:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_StakeInfo_$3686_storage_$",
                                                                "typeString": "mapping(address => struct IStakeManager.StakeInfo storage ref)"
                                                            }
                                                        },
                                                        "id": 2435,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "id": 2434,
                                                            "name": "relayManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 2384,
                                                            "src": "6034:12:6",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6027:20:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_storage",
                                                            "typeString": "struct IStakeManager.StakeInfo storage ref"
                                                        }
                                                    },
                                                    "id": 2436,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "stake",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3679,
                                                    "src": "6027:26:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 2437,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2388,
                                                    "src": "6055:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 2431,
                                                    "name": "SafeMath",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6761,
                                                    "src": "6014:8:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                        "typeString": "type(library SafeMath)"
                                                    }
                                                },
                                                "id": 2432,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6611,
                                                "src": "6014:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 2438,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6014:48:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "5985:77:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2440,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5985:77:6"
                                },
                                {
                                    "assignments": [
                                        2442
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2442,
                                            "mutability": "mutable",
                                            "name": "toBurn",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "6073:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2441,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6073:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2448,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2445,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2388,
                                                "src": "6103:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "32",
                                                "id": 2446,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6111:1:6",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                },
                                                "value": "2"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2443,
                                                "name": "SafeMath",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6761,
                                                "src": "6090:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                    "typeString": "type(library SafeMath)"
                                                }
                                            },
                                            "id": 2444,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "div",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6691,
                                            "src": "6090:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2447,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6090:23:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6073:40:6"
                                },
                                {
                                    "assignments": [
                                        2450
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 2450,
                                            "mutability": "mutable",
                                            "name": "reward",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 2477,
                                            "src": "6123:14:6",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 2449,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6123:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 2456,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2453,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2388,
                                                "src": "6153:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2454,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2442,
                                                "src": "6161:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2451,
                                                "name": "SafeMath",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6761,
                                                "src": "6140:8:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_SafeMath_$6761_$",
                                                    "typeString": "type(library SafeMath)"
                                                }
                                            },
                                            "id": 2452,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sub",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6611,
                                            "src": "6140:12:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2455,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6140:28:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6123:45:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2462,
                                                "name": "toBurn",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2442,
                                                "src": "6242:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "30",
                                                        "id": 2459,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "6230:1:6",
                                                        "subdenomination": null,
                                                        "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": 2458,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "6222:7:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 2457,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6222:7:6",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 2460,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6222:10:6",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2461,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6222:19:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2463,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6222:27:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2464,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6222:27:6"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2468,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2450,
                                                "src": "6280:6:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 2465,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2386,
                                                "src": "6259:11:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 2467,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6259:20:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 2469,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6259:28:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2470,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6259:28:6"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 2472,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2384,
                                                "src": "6317:12:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2473,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2386,
                                                "src": "6331:11:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 2474,
                                                "name": "reward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2450,
                                                "src": "6344:6:6",
                                                "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"
                                                }
                                            ],
                                            "id": 2471,
                                            "name": "StakePenalized",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3663,
                                            "src": "6302:14:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 2475,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6302:49:6",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2476,
                                    "nodeType": "EmitStatement",
                                    "src": "6297:54:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 2382,
                            "nodeType": "StructuredDocumentation",
                            "src": "5194:296:6",
                            "text": "Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns half of stake on the way.\n @param relayManager - entry to penalize\n @param beneficiary - address that receives half of the penalty amount\n @param amount - amount to withdraw from stake"
                        },
                        "functionSelector": "09a08af4",
                        "id": 2478,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2390,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5601:8:6"
                        },
                        "parameters": {
                            "id": 2389,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2384,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5525:20:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2383,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5525:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2386,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5547:27:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 2385,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5547:15:6",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 2388,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 2478,
                                    "src": "5576:14:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2387,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5576:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5524:67:6"
                        },
                        "returnParameters": {
                            "id": 2391,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5610:0:6"
                        },
                        "scope": 2479,
                        "src": "5495:863:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 2480,
                "src": "185:6175:6"
            }
        ],
        "src": "31:6330:6"
    },
    "compiler": {
        "name": "solc",
        "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2020-12-21T17:30:10.459Z",
    "devdoc": {
        "methods": {
            "penalizeRelayManager(address,address,uint256)": {
                "params": {
                    "amount": "- amount to withdraw from stake",
                    "beneficiary": "- address that receives half of the penalty amount",
                    "relayManager": "- entry to penalize"
                }
            },
            "stakeForAddress(address,uint256)": {
                "params": {
                    "relayManager": "- address that represents a stake entry and controls relay registrations on relay hubs",
                    "unstakeDelay": "- number of blocks to elapse before the owner can retrieve the stake after calling 'unlock'"
                }
            }
        }
    },
    "userdoc": {
        "methods": {
            "authorizedHubs(address,address)": {
                "notice": "maps relay managers to a map of addressed of their authorized hubs to the information on that hub"
            },
            "penalizeRelayManager(address,address,uint256)": {
                "notice": "Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns half of stake on the way."
            },
            "stakeForAddress(address,uint256)": {
                "notice": "Put a stake for a relayManager and set its unstake delay. If the entry does not exist, it is created, and the caller of this function becomes its owner. If the entry already exists, only the owner can call this function."
            },
            "stakes(address)": {
                "notice": "maps relay managers to their stakes"
            }
        }
    }
}
