{
  "contractName": "GoodFundManager",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_cDai",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bridgeContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_ubiRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockInterval",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "staking",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cDAIinterestEarned",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cDAIinterestDonated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdInterest",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdUBI",
          "type": "uint256"
        }
      ],
      "name": "FundsTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "name": "SchemeEnded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "name": "SchemeStarted",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "blockInterval",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "bridgeContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cDai",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "identity",
      "outputs": [
        {
          "internalType": "contract Identity",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lastTransferred",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reserve",
      "outputs": [
        {
          "internalType": "contract GoodReserveCDai",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "name": "setIdentity",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ubiRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "start",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract GoodReserveCDai",
          "name": "_reserve",
          "type": "address"
        }
      ],
      "name": "setReserve",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_bridgeContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        }
      ],
      "name": "setBridgeAndUBIRecipient",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockInterval",
          "type": "uint256"
        }
      ],
      "name": "setBlockInterval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "canRun",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract StakingContract",
          "name": "_staking",
          "type": "address"
        }
      ],
      "name": "transferInterest",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "end",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cDai\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bridgeContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ubiRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockInterval\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staking\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cDAIinterestEarned\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cDAIinterestDonated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdInterest\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdUBI\",\"type\":\"uint256\"}],\"name\":\"FundsTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"SchemeEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"SchemeStarted\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"blockInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"bridgeContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cDai\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"canRun\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"end\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"identity\",\"outputs\":[{\"internalType\":\"contract Identity\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastTransferred\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserve\",\"outputs\":[{\"internalType\":\"contract GoodReserveCDai\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockInterval\",\"type\":\"uint256\"}],\"name\":\"setBlockInterval\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridgeContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"setBridgeAndUBIRecipient\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"}],\"name\":\"setIdentity\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract GoodReserveCDai\",\"name\":\"_reserve\",\"type\":\"address\"}],\"name\":\"setReserve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract StakingContract\",\"name\":\"_staking\",\"type\":\"address\"}],\"name\":\"transferInterest\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ubiRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"canRun()\":{\"details\":\"Checks if enough time has passed away since the last funds transfer time\",\"return\":\"(bool) True if enough time has passed\"},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_avatar\":\"The avatar of the DAO\",\"_blockInterval\":\"How many blocks should be passed before the next execution of `transferInterest\",\"_bridgeContract\":\"The address of the bridge contract\",\"_cDai\":\"The address of cDai\",\"_identity\":\"The identity contract\",\"_ubiRecipient\":\"The recipient address on the sidechain\"}},\"end()\":{\"details\":\"Making the contract inactive after it has transferred funds to `_avatar`. Only the avatar can destroy the contract.\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"setBlockInterval(uint256)\":{\"details\":\"Allows the DAO to change the block interval\",\"params\":{\"_blockInterval\":\"the new interval value\"}},\"setBridgeAndUBIRecipient(address,address)\":{\"details\":\"Sets the bridge address on the current network and the recipient address on the sidechain. Only Avatar can call this method.\",\"params\":{\"_bridgeContract\":\"The new bridge address\",\"_recipient\":\"The new recipient address (NOTICE: this address may be a sidechain address)\"}},\"setReserve(address)\":{\"details\":\"Sets the whitelisted reserve. Only Avatar can call this method.\",\"params\":{\"_reserve\":\"The new reserve to be whitelisted\"}},\"start()\":{\"details\":\"Start function. Adds this contract to identity as a feeless scheme. Can only be called if scheme is registered\"},\"transferInterest(address)\":{\"details\":\"Collects UBI interest in cDai from a given staking contract and transfers that interest to the reserve contract. Then transfers the given gd which received from the reserve contract back to the staking contract and to the bridge, which locks the funds and then the GD tokens are been minted to the given address on the sidechain\",\"params\":{\"_staking\":\"Contract that implements `collectUBIInterest` and transfer cDai to a given address. The given address should be the same whitelisted `reserve` address in the current contract, in case that the given staking contract transfers the funds to another contract, zero GD tokens will be minted by the reserve contract. Emits `FundsTransferred` event in case which interest has been passed to the `reserve`\"}},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}},\"title\":\"GoodFundManager contract that transfer interest from the staking contract to the reserve contract and transfer the return mintable tokens to the staking contract cDAI support only\"},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodFundManager.sol\":\"GoodFundManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol\":{\"keccak256\":\"0x59fb5b1c4c3f68c1694f6ff5698016ac8ee9401b61e87473113dc103b7a6b0ff\",\"urls\":[\"bzz-raw://7410f43989dea44e64bed870958ce9199606dd8a9783e79fe8deca7b544164af\",\"dweb:/ipfs/QmPrrdvp2ErwL6SJSveB3JANo7ivadSMnk9gpWZD8nR7hy\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol\":{\"keccak256\":\"0xd6b17fe8c789a03e87c80046319caee9fc9c9b5ded9008b09a550027c205c5ab\",\"urls\":[\"bzz-raw://0f77e8dc5f6abeefc9a2e185c257516f7f0266ae2781dd67c18daf1aac667daf\",\"dweb:/ipfs/QmbeRqLP2MvTZifqPBSK3PUDh8TjC1RaTA8b1dRRAXahmJ\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol\":{\"keccak256\":\"0x7c542d44cbd864ee0ddecbc5016d9d7eb9ce65ab463fdd9f21eb8ce3c6ffc8ea\",\"urls\":[\"bzz-raw://4753dd823c0b0cbe7d7d02e1df64ace07d7a163af3aaff12697aee70a1b45f2f\",\"dweb:/ipfs/QmPkKeH88M3f6UbHphayUbjEBNV4rmoogtDmVundzBKbFK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol\":{\"keccak256\":\"0xa8b83d6e46b4c2b5cf29c3572df676605ec37b8ef9b51ca6627ee225d9c51a77\",\"urls\":[\"bzz-raw://021c034dffe504492175527a436c00e898dfbf508ffb4e68f3e2a059f8934b61\",\"dweb:/ipfs/QmayhA4XBR7SYRQRRgngDcjRWUfJPmgMTbwskjZaEkznJ1\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodFundManager.sol\":{\"keccak256\":\"0xe6d78ea2ce8cdd16eb1e860e4130da01a4c4c3f0f06c9cdef3f80865f64e5064\",\"urls\":[\"bzz-raw://cf0644a9e54c920f28f39c5437937cab60ce462e685c2b0b456164c2047c38c0\",\"dweb:/ipfs/Qmbydu1amsRWsNLyndqjQ3QmYTt6nP5Gri55fhp8Xa1JRN\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol\":{\"keccak256\":\"0x951b08d2bf3aa8d2da3322220bdff8473457ea52845a6c76ab7732bcbccaaf9a\",\"urls\":[\"bzz-raw://7728a9ba486bddaa950c37c033522af874d518e9b53e4f844320bed6e14d41eb\",\"dweb:/ipfs/QmdEFS6efb3QFWoWhvfy9xHBvykQVbfnF6raqUsn9mhAnu\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol\":{\"keccak256\":\"0x0fa6c1c0d54d076325a80278bf47e214dbb176b63c92bd0725983a530462794e\",\"urls\":[\"bzz-raw://87efa2ad8c36bf560ab4a3e982c518dcfa1c757595b0f2aeede8f70b8fd7a398\",\"dweb:/ipfs/QmNSdgBMBDMrv7WNXYQWhRFgRpDCW7gRW8VqPArcgE9yQH\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0x3199053db04cdae6c9b4380921a4a4ee720b568d6a9660883b29d25fbec31bc0\",\"urls\":[\"bzz-raw://1b0ff368e21d6007c06e4cfb286fe59d7d7d3ec06283300c9be2153ba11fa93a\",\"dweb:/ipfs/QmRPq2wZM4RAcbj31dP34GCr1CSy2qy3JqfXEkdVie4HLT\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xe195405e9993d575173cdb5dd408db7459a026b9a98085c1a3b676f020f46584\",\"urls\":[\"bzz-raw://f6beab874b52e710d2c42334e34bb5592146f7dd148d96ff32c0c474412bf2f4\",\"dweb:/ipfs/QmUKmVUX4Fif7dguPgC459cpGegiJd1s24YhgZUrBUkkDN\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\":{\"keccak256\":\"0xc4ca2883e0b0743604143952024c250bb13737ad54bb666b117efdcb766fe3a8\",\"urls\":[\"bzz-raw://bdaf72028f2dc29aa5191b2bfca315a9e3b1d58f900166bdb5ae5f500d569384\",\"dweb:/ipfs/QmZngPiWLXA9i2vp6XNPcGA23GHxT99V1Qma6iRivtbREy\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzz-raw://7456513521bae915089dfd5879b685e47f3f180ad9ffe24cc3b19275b1da28ed\",\"dweb:/ipfs/QmbM1avKkyyTHEeTs3CqheyZwgAMNzVi3iDudqBdUJ2WPM\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600280546001600160a01b03191690553480156200002157600080fd5b5060405162001c3638038062001c36833981810160405260c08110156200004757600080fd5b50805160208201516040808401516060850151608086015160a090960151600080546001600160a01b03191633178082559451969795969395929492939192429260028402928a928a928492849284926001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b0319166001600160a01b03838116919091179182905516156200018f57600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200014157600080fd5b505afa15801562000156573d6000803e3d6000fd5b505050506040513d60208110156200016d57600080fd5b5051600280546001600160a01b0319166001600160a01b039092169190911790555b506001600160a01b038116620001ec576040805162461bcd60e51b815260206004820152601960248201527f537570706c696564206964656e74697479206973206e756c6c00000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b039290921691909117905550508183106200024e5760405162461bcd60e51b815260040180806020018281038252602681526020018062001c106026913960400191505060405180910390fd5b60049290925560055560068054610100600160a81b0319166101006001600160a01b03938416021760ff19169055600780546001600160a01b031990811687841617909155600980548216868416179055600a8054909116918416919091179055600b819055620002cc4382620002dc602090811b620013d417901c565b600c555062000300945050505050565b6000808211620002eb57600080fd5b6000828481620002f757fe5b04949350505050565b61190080620003106000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80639b089d55116100de578063c3c5a54711610097578063cd59658311610071578063cd59658314610335578063eda4e6d61461033d578063efbe1c1c14610345578063f2fde38b1461034d57610173565b8063c3c5a547146102ff578063c4c22e9814610325578063cd3293de1461032d57610173565b80639b089d551461029c5780639cecc80a146102a4578063a1d20069146102ca578063ba6943f6146102d2578063be9a6555146102ef578063c33f0d4e146102f757610173565b8063506ec09511610130578063506ec095146102165780635d5bf1781461023057806360b7551614610256578063715018a6146102845780638da5cb5b1461028c5780638f32d59b1461029457610173565b806305fa551b14610178578063086cfca8146101a057806322366844146101c657806322f3e2d4146101e25780632c159a1a146101ea578063355aa1f01461020e575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610373565b005b61019e600480360360208110156101b657600080fd5b50356001600160a01b0316610ae7565b6101ce610ba2565b604080519115158252519081900360200190f35b6101ce610bb2565b6101f2610bbb565b604080516001600160a01b039092168252519081900360200190f35b6101ce610bca565b61021e610bea565b60408051918252519081900360200190f35b61019e6004803603602081101561024657600080fd5b50356001600160a01b0316610bf0565b61019e6004803603604081101561026c57600080fd5b506001600160a01b0381358116916020013516610cd9565b61019e610d54565b6101f2610daf565b6101ce610dbe565b6101f2610dcf565b61019e600480360360208110156102ba57600080fd5b50356001600160a01b0316610dde565b61021e610e4d565b61019e600480360360208110156102e857600080fd5b5035610e53565b61019e610ea5565b6101f2610f0b565b6101ce6004803603602081101561031557600080fd5b50356001600160a01b0316610f1a565b61021e611007565b6101f261100d565b6101f261101c565b61021e61102b565b61019e611031565b61019e6004803603602081101561036357600080fd5b50356001600160a01b03166113b7565b60065460ff166103ba576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6008546001600160a01b0316610417576040805162461bcd60e51b815260206004820152601b60248201527f7265736572766520686173206e6f7420696e697469616c697a65640000000000604482015290519081900360640190fd5b6003546040805163639e625760e11b81526001600160a01b03808516600483015291518493929092169163c73cc4ae91602480820192602092909190829003018186803b15801561046757600080fd5b505afa15801561047b573d6000803e3d6000fd5b505050506040513d602081101561049157600080fd5b50516104e4576040805162461bcd60e51b815260206004820152601b60248201527f6973206e6f742077686974656c697374656420636f6e74726163740000000000604482015290519081900360640190fd5b6104ec610bca565b6105275760405162461bcd60e51b815260040180806020018281038252602281526020018061188a6022913960400191505060405180910390fd5b600b5461053b90439063ffffffff6113d416565b600c55600754600854604080516370a0823160e01b81526001600160a01b039283166004820152905160009392909216916370a0823191602480820192602092909190829003018186803b15801561059257600080fd5b505afa1580156105a6573d6000803e3d6000fd5b505050506040513d60208110156105bc57600080fd5b505160085460408051630374559960e41b81526001600160a01b03928316600482015290519293506000929186169163374559909160248082019260809290919082900301818787803b15801561061257600080fd5b505af1158015610626573d6000803e3d6000fd5b505050506040513d608081101561063c57600080fd5b5060600151600754600854604080516370a0823160e01b81526001600160a01b03928316600482015290519394506000936106d293879316916370a08231916024808301926020929190829003018186803b15801561069a57600080fd5b505afa1580156106ae573d6000803e3d6000fd5b505050506040513d60208110156106c457600080fd5b50519063ffffffff6113f816565b905060006106fc620f42406106f08463ffffffff8088169061140d16565b9063ffffffff6113d416565b90506000610710838363ffffffff6113f816565b6008546007546040805163ab89d2a760e01b81526001600160a01b039283166004820152602481018890526044810185905281519495506000948594939093169263ab89d2a79260648084019391929182900301818787803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506040513d604081101561079f57600080fd5b50805160209182015160065460408051631c2eb17b60e31b815290519396509194506000936101009091046001600160a01b03169263e1758bd8926004808201939291829003018186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b50519050821561090757806001600160a01b031663a9059cbb8b856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561088a57600080fd5b505af115801561089e573d6000803e3d6000fd5b505050506040513d60208110156108b457600080fd5b5051610907576040805162461bcd60e51b815260206004820152601860248201527f696e746572657374207472616e73666572206661696c65640000000000000000604482015290519081900360640190fd5b8115610a8057600954600a54604080516bffffffffffffffffffffffff19606093841b16602080830191909152825180830360140181526034830193849052630200057560e51b9093526001600160a01b0394851660388301818152605884018990526078840195865284516098850152845196881696634000aea09692958a95909492939260b8909101919085019080838360005b838110156109b557818101518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b5051610a80576040805162461bcd60e51b815260206004820152601a60248201527f75626920627269646765207472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b60085460408051888152602081018890528082018690526060810185905290516001600160a01b03928316928d169133917f5992b5ba5cc3d1955966ef76f8eeb88f8db95ca1aa0f968a01343547670cd2f69181900360800190a450505050505050505050565b610aef610dbe565b610af857600080fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b158015610b5457600080fd5b505afa158015610b68573d6000803e3d6000fd5b505050506040513d6020811015610b7e57600080fd5b5051600280546001600160a01b0319166001600160a01b0390921691909117905550565b6000610bad30610f1a565b905090565b60065460ff1681565b6003546001600160a01b031681565b6000600c54610be4600b54436113d490919063ffffffff16565b11905090565b60055481565b610bf8610dbe565b610c0157600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b5051610cb7576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610d26576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600980546001600160a01b039384166001600160a01b031991821617909155600a8054929093169116179055565b610d5c610dbe565b610d6557600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6007546001600160a01b031681565b6001546001600160a01b03163314610e2b576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6001546001600160a01b03163314610ea0576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600b55565b610ead610ba2565b610ef9576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b610f0161143b565b610f096116a3565b565b600a546001600160a01b031681565b6001546000906001600160a01b0316610f6e576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60025460015460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015610fc657600080fd5b505afa158015610fda573d6000803e3d6000fd5b505050506040513d6020811015610ff057600080fd5b5051610ffe57506000611002565b5060015b919050565b600b5481565b6008546001600160a01b031681565b6009546001600160a01b031681565b60045481565b6001546001600160a01b0316331461107e576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156110c957600080fd5b505afa1580156110dd573d6000803e3d6000fd5b505050506040513d60208110156110f357600080fd5b5051905080156111cf576007546006546040805163a9059cbb60e01b81526101009092046001600160a01b03908116600484015260248301859052905192169163a9059cbb916044808201926020929091908290030181600087803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b505050506040513d602081101561118557600080fd5b50516111cf576040805162461bcd60e51b815260206004820152601460248201527318d9185a481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b6000600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561121f57600080fd5b505afa158015611233573d6000803e3d6000fd5b505050506040513d602081101561124957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561129757600080fd5b505afa1580156112ab573d6000803e3d6000fd5b505050506040513d60208110156112c157600080fd5b505190508015611398576006546040805163a9059cbb60e01b81526101009092046001600160a01b0390811660048401526024830184905290519084169163a9059cbb9160448083019260209291908290030181600087803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b505050506040513d602081101561135057600080fd5b5051611398576040805162461bcd60e51b815260206004820152601260248201527119d9081d1c985b9cd9995c8819985a5b195960721b604482015290519081900360640190fd5b6006546113b29061010090046001600160a01b0316611789565b505050565b6113bf610dbe565b6113c857600080fd5b6113d18161181b565b50565b60008082116113e257600080fd5b60008284816113ed57fe5b049150505b92915050565b60008282111561140757600080fd5b50900390565b60008261141c575060006113f2565b8282028284828161142957fe5b041461143457600080fd5b9392505050565b611443610ba2565b61148f576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b6002546003546040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316635f539d6960e01b17815260015494516368db844d60e11b81526001600160a01b03968716600482018181529688169582018690526000606483018190526080958301958652845160848401528451989099169863d1b7089a989197949695909493909260a40191808383885b8381101561154757818101518382015260200161152f565b50505050905090810190601f1680156115745780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561159657600080fd5b505af11580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156115d357600080fd5b8151602083018051604051929492938301929190846401000000008211156115fa57600080fd5b90830190602082018581111561160f57600080fd5b825164010000000081118282018810171561162957600080fd5b82525081516020918201929091019080838360005b8381101561165657818101518382015260200161163e565b50505050905090810190601f1680156116835780820380516001836020036101000a031916815260200191505b506040525050600154610f0993506001600160a01b031691506113b79050565b60045442101580156116b6575060055442105b6116f7576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081a5b881c195c9a5bd9609a1b604482015290519081900360640190fd5b60065460ff1615611744576040805162461bcd60e51b815260206004820152601260248201527163616e6e6f7420737461727420747769636560701b604482015290519081900360640190fd5b6006805460ff1916600117905560408051428152905133917f727dd98701807c5fdf715b9f1fd7d87461a558e2ab3e05935add76e42e330fa3919081900360200190a2565b60065460ff166117d0576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6006805460ff1916905560408051428152905133917ef689ee9beb942c1c9c0d6642687ace05a9000d5f2979d344163c57829fa779919081900360200190a2806001600160a01b0316ff5b6001600160a01b03811661182e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe4e65656420746f207761697420666f7220746865206e65787420696e74657276616c6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64a265627a7a7231582043c23c9c820c939b3cd23281d7e42930fc56fe16044ddfa9a47372682b5dc5a264736f6c6343000510003273746172742063616e6e6f74206265206166746572206e6f7220657175616c20746f20656e64",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c80639b089d55116100de578063c3c5a54711610097578063cd59658311610071578063cd59658314610335578063eda4e6d61461033d578063efbe1c1c14610345578063f2fde38b1461034d57610173565b8063c3c5a547146102ff578063c4c22e9814610325578063cd3293de1461032d57610173565b80639b089d551461029c5780639cecc80a146102a4578063a1d20069146102ca578063ba6943f6146102d2578063be9a6555146102ef578063c33f0d4e146102f757610173565b8063506ec09511610130578063506ec095146102165780635d5bf1781461023057806360b7551614610256578063715018a6146102845780638da5cb5b1461028c5780638f32d59b1461029457610173565b806305fa551b14610178578063086cfca8146101a057806322366844146101c657806322f3e2d4146101e25780632c159a1a146101ea578063355aa1f01461020e575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610373565b005b61019e600480360360208110156101b657600080fd5b50356001600160a01b0316610ae7565b6101ce610ba2565b604080519115158252519081900360200190f35b6101ce610bb2565b6101f2610bbb565b604080516001600160a01b039092168252519081900360200190f35b6101ce610bca565b61021e610bea565b60408051918252519081900360200190f35b61019e6004803603602081101561024657600080fd5b50356001600160a01b0316610bf0565b61019e6004803603604081101561026c57600080fd5b506001600160a01b0381358116916020013516610cd9565b61019e610d54565b6101f2610daf565b6101ce610dbe565b6101f2610dcf565b61019e600480360360208110156102ba57600080fd5b50356001600160a01b0316610dde565b61021e610e4d565b61019e600480360360208110156102e857600080fd5b5035610e53565b61019e610ea5565b6101f2610f0b565b6101ce6004803603602081101561031557600080fd5b50356001600160a01b0316610f1a565b61021e611007565b6101f261100d565b6101f261101c565b61021e61102b565b61019e611031565b61019e6004803603602081101561036357600080fd5b50356001600160a01b03166113b7565b60065460ff166103ba576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6008546001600160a01b0316610417576040805162461bcd60e51b815260206004820152601b60248201527f7265736572766520686173206e6f7420696e697469616c697a65640000000000604482015290519081900360640190fd5b6003546040805163639e625760e11b81526001600160a01b03808516600483015291518493929092169163c73cc4ae91602480820192602092909190829003018186803b15801561046757600080fd5b505afa15801561047b573d6000803e3d6000fd5b505050506040513d602081101561049157600080fd5b50516104e4576040805162461bcd60e51b815260206004820152601b60248201527f6973206e6f742077686974656c697374656420636f6e74726163740000000000604482015290519081900360640190fd5b6104ec610bca565b6105275760405162461bcd60e51b815260040180806020018281038252602281526020018061188a6022913960400191505060405180910390fd5b600b5461053b90439063ffffffff6113d416565b600c55600754600854604080516370a0823160e01b81526001600160a01b039283166004820152905160009392909216916370a0823191602480820192602092909190829003018186803b15801561059257600080fd5b505afa1580156105a6573d6000803e3d6000fd5b505050506040513d60208110156105bc57600080fd5b505160085460408051630374559960e41b81526001600160a01b03928316600482015290519293506000929186169163374559909160248082019260809290919082900301818787803b15801561061257600080fd5b505af1158015610626573d6000803e3d6000fd5b505050506040513d608081101561063c57600080fd5b5060600151600754600854604080516370a0823160e01b81526001600160a01b03928316600482015290519394506000936106d293879316916370a08231916024808301926020929190829003018186803b15801561069a57600080fd5b505afa1580156106ae573d6000803e3d6000fd5b505050506040513d60208110156106c457600080fd5b50519063ffffffff6113f816565b905060006106fc620f42406106f08463ffffffff8088169061140d16565b9063ffffffff6113d416565b90506000610710838363ffffffff6113f816565b6008546007546040805163ab89d2a760e01b81526001600160a01b039283166004820152602481018890526044810185905281519495506000948594939093169263ab89d2a79260648084019391929182900301818787803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506040513d604081101561079f57600080fd5b50805160209182015160065460408051631c2eb17b60e31b815290519396509194506000936101009091046001600160a01b03169263e1758bd8926004808201939291829003018186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b50519050821561090757806001600160a01b031663a9059cbb8b856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561088a57600080fd5b505af115801561089e573d6000803e3d6000fd5b505050506040513d60208110156108b457600080fd5b5051610907576040805162461bcd60e51b815260206004820152601860248201527f696e746572657374207472616e73666572206661696c65640000000000000000604482015290519081900360640190fd5b8115610a8057600954600a54604080516bffffffffffffffffffffffff19606093841b16602080830191909152825180830360140181526034830193849052630200057560e51b9093526001600160a01b0394851660388301818152605884018990526078840195865284516098850152845196881696634000aea09692958a95909492939260b8909101919085019080838360005b838110156109b557818101518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b5051610a80576040805162461bcd60e51b815260206004820152601a60248201527f75626920627269646765207472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b60085460408051888152602081018890528082018690526060810185905290516001600160a01b03928316928d169133917f5992b5ba5cc3d1955966ef76f8eeb88f8db95ca1aa0f968a01343547670cd2f69181900360800190a450505050505050505050565b610aef610dbe565b610af857600080fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b158015610b5457600080fd5b505afa158015610b68573d6000803e3d6000fd5b505050506040513d6020811015610b7e57600080fd5b5051600280546001600160a01b0319166001600160a01b0390921691909117905550565b6000610bad30610f1a565b905090565b60065460ff1681565b6003546001600160a01b031681565b6000600c54610be4600b54436113d490919063ffffffff16565b11905090565b60055481565b610bf8610dbe565b610c0157600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b5051610cb7576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610d26576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600980546001600160a01b039384166001600160a01b031991821617909155600a8054929093169116179055565b610d5c610dbe565b610d6557600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6007546001600160a01b031681565b6001546001600160a01b03163314610e2b576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6001546001600160a01b03163314610ea0576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600b55565b610ead610ba2565b610ef9576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b610f0161143b565b610f096116a3565b565b600a546001600160a01b031681565b6001546000906001600160a01b0316610f6e576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60025460015460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015610fc657600080fd5b505afa158015610fda573d6000803e3d6000fd5b505050506040513d6020811015610ff057600080fd5b5051610ffe57506000611002565b5060015b919050565b600b5481565b6008546001600160a01b031681565b6009546001600160a01b031681565b60045481565b6001546001600160a01b0316331461107e576040805162461bcd60e51b815260206004820181905260248201526000805160206118ac833981519152604482015290519081900360640190fd5b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156110c957600080fd5b505afa1580156110dd573d6000803e3d6000fd5b505050506040513d60208110156110f357600080fd5b5051905080156111cf576007546006546040805163a9059cbb60e01b81526101009092046001600160a01b03908116600484015260248301859052905192169163a9059cbb916044808201926020929091908290030181600087803b15801561115b57600080fd5b505af115801561116f573d6000803e3d6000fd5b505050506040513d602081101561118557600080fd5b50516111cf576040805162461bcd60e51b815260206004820152601460248201527318d9185a481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b6000600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561121f57600080fd5b505afa158015611233573d6000803e3d6000fd5b505050506040513d602081101561124957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561129757600080fd5b505afa1580156112ab573d6000803e3d6000fd5b505050506040513d60208110156112c157600080fd5b505190508015611398576006546040805163a9059cbb60e01b81526101009092046001600160a01b0390811660048401526024830184905290519084169163a9059cbb9160448083019260209291908290030181600087803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b505050506040513d602081101561135057600080fd5b5051611398576040805162461bcd60e51b815260206004820152601260248201527119d9081d1c985b9cd9995c8819985a5b195960721b604482015290519081900360640190fd5b6006546113b29061010090046001600160a01b0316611789565b505050565b6113bf610dbe565b6113c857600080fd5b6113d18161181b565b50565b60008082116113e257600080fd5b60008284816113ed57fe5b049150505b92915050565b60008282111561140757600080fd5b50900390565b60008261141c575060006113f2565b8282028284828161142957fe5b041461143457600080fd5b9392505050565b611443610ba2565b61148f576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b6002546003546040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316635f539d6960e01b17815260015494516368db844d60e11b81526001600160a01b03968716600482018181529688169582018690526000606483018190526080958301958652845160848401528451989099169863d1b7089a989197949695909493909260a40191808383885b8381101561154757818101518382015260200161152f565b50505050905090810190601f1680156115745780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561159657600080fd5b505af11580156115aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156115d357600080fd5b8151602083018051604051929492938301929190846401000000008211156115fa57600080fd5b90830190602082018581111561160f57600080fd5b825164010000000081118282018810171561162957600080fd5b82525081516020918201929091019080838360005b8381101561165657818101518382015260200161163e565b50505050905090810190601f1680156116835780820380516001836020036101000a031916815260200191505b506040525050600154610f0993506001600160a01b031691506113b79050565b60045442101580156116b6575060055442105b6116f7576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081a5b881c195c9a5bd9609a1b604482015290519081900360640190fd5b60065460ff1615611744576040805162461bcd60e51b815260206004820152601260248201527163616e6e6f7420737461727420747769636560701b604482015290519081900360640190fd5b6006805460ff1916600117905560408051428152905133917f727dd98701807c5fdf715b9f1fd7d87461a558e2ab3e05935add76e42e330fa3919081900360200190a2565b60065460ff166117d0576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6006805460ff1916905560408051428152905133917ef689ee9beb942c1c9c0d6642687ace05a9000d5f2979d344163c57829fa779919081900360200190a2806001600160a01b0316ff5b6001600160a01b03811661182e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe4e65656420746f207761697420666f7220746865206e65787420696e74657276616c6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64a265627a7a7231582043c23c9c820c939b3cd23281d7e42930fc56fe16044ddfa9a47372682b5dc5a264736f6c63430005100032",
  "sourceMap": "710:8493:24:-;;;443:64:7;;;-1:-1:-1;;;;;;443:64:7;;;3186:509:24;5:2:-1;;;;30:1;27;20:12;5:2;3186:509:24;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;3186:509:24;;;;;;;;;;;;;;;;;;;;;;;;515:6:77;:19;;-1:-1:-1;;;;;;515:19:77;524:10;515:19;;;;549:40;;3186:509:24;;;;;;;;;;;;3453:3;;3464:1;3458:7;;;3186:509;;;;;;;;;;-1:-1:-1;;;;;582:6:77;;;;;515;549:40;;515:6;;549:40;688:6:7;:16;;-1:-1:-1;;;;;;688:16:7;-1:-1:-1;;;;;688:16:7;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:7;-1:-1:-1;;;;;787:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:7;754:10;:48;;-1:-1:-1;;;;;;754:48:7;-1:-1:-1;;;;;754:48:7;;;;;;;;;715:98;-1:-1:-1;;;;;;483:24:11;;475:62;;;;;-1:-1:-1;;;475:62:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:8;:20;;-1:-1:-1;;;;;;547:20:11;-1:-1:-1;;;;;547:20:11;;;;;;;;;;-1:-1:-1;;1629:25:2;;;1621:76;;;;-1:-1:-1;;;1621:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:11;:26;;;;1744:9;:22;1776:6;:16;;-1:-1:-1;;;;;;1776:16:2;;-1:-1:-1;;;;;1776:16:2;;;;;-1:-1:-1;;1803:16:2;;;3490:4:24;:19;;-1:-1:-1;;;;;;3490:19:24;;;;;;;;;;3519:14;:32;;;;;;;;;;3561:12;:28;;;;;;;;;;;;;;3599:13;:30;;;3657:31;:12;3599:30;3657:16;;;;;;;:31;;:::i;:::-;3639:15;:49;-1:-1:-1;710:8493:24;;-1:-1:-1;;;;;710:8493:24;778:296:76;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:76:o;710:8493:24:-;;;;;;;",
  "deployedSourceMap": "710:8493:24:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;710:8493:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6351:2047;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6351:2047:24;-1:-1:-1;;;;;6351:2047:24;;:::i;:::-;;1698:143:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:7;-1:-1:-1;;;;;1698:143:7;;:::i;1987:102::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;274:20:2;;;:::i;278:24:11:-;;;:::i;:::-;;;;-1:-1:-1;;;;;278:24:11;;;;;;;;;;;;;;5389:121:24;;;:::i;243:24:2:-;;;:::i;:::-;;;;;;;;;;;;;;;;2735:168:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2735:168:11;-1:-1:-1;;;;;2735:168:11;;:::i;4720:223:24:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4720:223:24;;;;;;;;;;:::i;1347:137:77:-;;;:::i;659:77::-;;;:::i;979:90::-;;;:::i;832:17:24:-;;;:::i;4099:99::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4099:99:24;-1:-1:-1;;;;;4099:99:24;;:::i;1567:30::-;;;:::i;5073:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5073:149:24;;:::i;3847:90::-;;;:::i;1307:27::-;;;:::i;2235:262:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:7;-1:-1:-1;;;;;2235:262:7;;:::i;1454:28:24:-;;;:::i;964:30::-;;;:::i;1154:29::-;;;:::i;211:26:2:-;;;:::i;8555:646:24:-;;;:::i;1655:107:77:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:77;-1:-1:-1;;;;;1655:107:77;;:::i;6351:2047:24:-;544:8:2;;;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2697:7:24;;-1:-1:-1;;;;;2697:7:24;2681:70;;;;;-1:-1:-1;;;2681:70:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;1939:8:11;;:33;;;-1:-1:-1;;;1939:33:11;;-1:-1:-1;;;;;1939:33:11;;;;;;;;;6505:8:24;;1939::11;;;;;:22;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;1939:33:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1939:33:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1939:33:11;1931:73;;;;;-1:-1:-1;;;1931:73:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;6551:8:24;:6;:8::i;:::-;6530:89;;;;-1:-1:-1;;;6530:89:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6665:13;;6648:31;;:12;;:31;:16;:31;:::i;:::-;6630:15;:49;6763:4;;6786:7;;6763:32;;;-1:-1:-1;;;6763:32:24;;-1:-1:-1;;;;;6786:7:24;;;6763:32;;;;;;6738:22;;6763:4;;;;;:14;;:32;;;;;;;;;;;;;;;:4;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;6763:32:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6763:32:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6763:32:24;7102:7;;7053:67;;;-1:-1:-1;;;7053:67:24;;-1:-1:-1;;;;;7102:7:24;;;7053:67;;;;;;6763:32;;-1:-1:-1;7029:20:24;;7053:27;;;;;;:67;;;;;;;;;;;;;;;7029:20;7053:27;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;7053:67:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7053:67:24;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;7053:67:24;;;7195:4;;7218:7;;7053:67;7195:32;;-1:-1:-1;;;7195:32:24;;-1:-1:-1;;;;;7218:7:24;;;7195:32;;;;;;7053:67;;-1:-1:-1;7176:16:24;;7195:74;;7245:14;;7195:4;;:14;;:32;;;;;7053:67;;7195:32;;;;;;;:4;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;7195:32:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7195:32:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7195:32:24;;:74;:36;:74;:::i;:::-;7176:93;-1:-1:-1;7280:23:24;7306:36;7338:3;7306:27;7176:93;7306:27;;;;;:12;:27;:::i;:::-;:31;:36;:31;:36;:::i;:::-;7280:62;-1:-1:-1;7352:21:24;7376:29;:8;7280:62;7376:29;:12;:29;:::i;:::-;7534:7;;7574:4;;7534:103;;;-1:-1:-1;;;7534:103:24;;-1:-1:-1;;;;;7574:4:24;;;7534:103;;;;;;;;;;;;;;;;;;7352:53;;-1:-1:-1;7497:18:24;;;;7534:7;;;;;:26;;:103;;;;;;;;;;;;;7497:18;7534:7;:103;;;5:2:-1;;;;30:1;27;20:12;5:2;7534:103:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7534:103:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7534:103:24;;;;;;;7754:6;;7534:103;7754:20;;-1:-1:-1;;;7754:20:24;;;;7534:103;;-1:-1:-1;7534:103:24;;-1:-1:-1;7716:16:24;;7754:6;;;;-1:-1:-1;;;;;7754:6:24;;:18;;:20;;;;;7534:103;7754:20;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;7754:20:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7754:20:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7754:20:24;;-1:-1:-1;7789:14:24;;7786:112;;7825:5;-1:-1:-1;;;;;7825:14:24;;7848:8;7859:10;7825:45;;;;;;;;;;;;;-1:-1:-1;;;;;7825:45:24;-1:-1:-1;;;;;7825:45:24;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7825:45:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7825:45:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7825:45:24;7817:81;;;;;-1:-1:-1;;;7817:81:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;7911:9;;7908:263;;8042:14;;8114:12;;8097:30;;;-1:-1:-1;;8097:30:24;;;;;;;;;;;;;;;26:21:-1;;;8097:30:24;22:32:-1;6:49;;8097:30:24;;;;;;;-1:-1:-1;;;8003:138:24;;;-1:-1:-1;;;;;8042:14:24;;;8003:138;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;;;;8042:14;;8074:5;;8097:30;;8003:138;;;;;;;;;;;;;;;8042:14;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8003:138:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8003:138:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8003:138:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8003:138:24;7995:176;;;;;-1:-1:-1;;;7995:176:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;8279:7;;8186:205;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8279:7:24;;;;8186:205;;;8216:10;;8186:205;;;;;;;;;2014:1:11;;;;;;;;2761::24;6351:2047;:::o;1698:143:7:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;1760:6:7;:16;;-1:-1:-1;;;;;;1760:16:7;-1:-1:-1;;;;;1760:16:7;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:7;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:7;1786:10;:48;;-1:-1:-1;;;;;;1786:48:7;-1:-1:-1;;;;;1786:48:7;;;;;;;;;-1:-1:-1;1698:143:7:o;1987:102::-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;:::o;274:20:2:-;;;;;;:::o;278:24:11:-;;;-1:-1:-1;;;;;278:24:11;;:::o;5389:121:24:-;5427:4;5488:15;;5454:31;5471:13;;5454:12;:16;;:31;;;;:::i;:::-;:49;5447:56;;5389:121;:::o;243:24:2:-;;;;:::o;2735:168:11:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;2811:9:11;-1:-1:-1;;;;;2811:22:11;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2811:24:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2811:24:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2811:24:11;2803:63;;;;;-1:-1:-1;;;2803:63:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:8;:20;;-1:-1:-1;;;;;;2876:20:11;-1:-1:-1;;;;;2876:20:11;;;;;;;;;;2735:168::o;4720:223:24:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;4869:14:24;:32;;-1:-1:-1;;;;;4869:32:24;;;-1:-1:-1;;;;;;4869:32:24;;;;;;;4911:12;:25;;;;;;;;;;;4720:223::o;1347:137:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:77;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:77;;;1347:137::o;659:77::-;697:7;723:6;-1:-1:-1;;;;;723:6:77;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:77;1042:10;:20;;979:90::o;832:17:24:-;;;-1:-1:-1;;;;;832:17:24;;:::o;4099:99::-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;4173:7:24;:18;;-1:-1:-1;;;;;;4173:18:24;-1:-1:-1;;;;;4173:18:24;;;;;;;;;;4099:99::o;1567:30::-;;;;:::o;5073:149::-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;5185:13:24;:30;5073:149::o;3847:90::-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;;;;3896:11:24;:9;:11::i;:::-;3917:13;:11;:13::i;:::-;3847:90::o;1307:27::-;;;-1:-1:-1;;;;;1307:27:24;;:::o;2235:262:7:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:7;2310:49;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;;;;2376:10;;;2422:6;2376:54;;;-1:-1:-1;;;2376:54:7;;-1:-1:-1;;;;;2376:54:7;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:7;2370:100;;-1:-1:-1;2454:5:7;2447:12;;2370:100;-1:-1:-1;2486:4:7;2235:262;;;;:::o;1454:28:24:-;;;;:::o;964:30::-;;;-1:-1:-1;;;;;964:30:24;;:::o;1154:29::-;;;-1:-1:-1;;;;;1154:29:24;;:::o;211:26:2:-;;;;:::o;8555:646:24:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;8700:4:24;;:29;;;-1:-1:-1;;;8700:29:24;;8723:4;8700:29;;;;;;8669:28;;-1:-1:-1;;;;;8700:4:24;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;8700:29:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8700:29:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8700:29:24;;-1:-1:-1;8743:24:24;;8739:139;;8791:4;;8813:6;;8791:52;;;-1:-1:-1;;;8791:52:24;;:4;8813:6;;;-1:-1:-1;;;;;8813:6:24;;;8791:52;;;;;;;;;;;;:4;;;:13;;:52;;;;;;;;;;;;;;;:4;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;8791:52:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8791:52:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8791:52:24;8783:84;;;;;-1:-1:-1;;;8783:84:24;;;;;;;;;;;;-1:-1:-1;;;8783:84:24;;;;;;;;;;;;;;;8887:16;8925:6;;;;;;;;;-1:-1:-1;;;;;8925:6:24;-1:-1:-1;;;;;8925:18:24;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8925:20:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8925:20:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8925:20:24;8986:30;;;-1:-1:-1;;;8986:30:24;;9010:4;8986:30;;;;;;8925:20;;-1:-1:-1;8957:26:24;;-1:-1:-1;;;;;8986:15:24;;;;;:30;;;;;8925:20;;8986:30;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;8986:30:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8986:30:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8986:30:24;;-1:-1:-1;9030:22:24;;9026:134;;9099:6;;9076:51;;;-1:-1:-1;;;9076:51:24;;9099:6;;;;-1:-1:-1;;;;;9099:6:24;;;9076:51;;;;;;;;;;;;:14;;;;;;:51;;;;;;;;;;;;;;-1:-1:-1;9076:14:24;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;9076:51:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9076:51:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9076:51:24;9068:81;;;;;-1:-1:-1;;;9068:81:24;;;;;;;;;;;;-1:-1:-1;;;9068:81:24;;;;;;;;;;;;;;;9187:6;;9169:25;;9187:6;;;-1:-1:-1;;;;;9187:6:24;9169:17;:25::i;:::-;1000:1:7;;;8555:646:24:o;1655:107:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;778:296:76:-;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;-1:-1:-1;;778:296:76;;;;;:::o;1205:145::-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:76;;;1205:145::o;229:421::-;287:7;527:6;523:45;;-1:-1:-1;556:1:76;549:8;;523:45;590:5;;;594:1;590;:5;:1;613:5;;;;;:10;605:19;;;;;;642:1;229:421;-1:-1:-1;;;229:421:76:o;786:280:5:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;;;;841:10:5;;885:8;;908:62;;;964:4;908:62;;;;;;;;;;26:21:-1;;;22:32;;6:49;;908:62:5;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;841:10:5;984:6;841:174;;-1:-1:-1;;;841:174:5;;-1:-1:-1;;;;;885:8:5;;;841:174;;;;;;984:6;;;841:174;;;;;;:10;:174;;;;;;;;;;;;;;;;;;;;;:10;;;;;:22;;885:8;;908:62;;984:6;841:10;;:174;;;;;;;;25:18:-1;841:10:5;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;841:174:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;841:174:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;841:174:5;;;;;;39:16:-1;36:1;17:17;2:54;101:4;841:174:5;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;841:174:5;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;841:174:5;;420:4:-1;411:14;;;;841:174:5;;;;;411:14:-1;841:174:5;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;841:174:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;841:174:5;;-1:-1:-1;;1051:6:5;;1025:34;;-1:-1:-1;;;;;;1051:6:5;;-1:-1:-1;1025:17:5;;-1:-1:-1;1025:34:5:i;2010:134:2:-;918:11;;911:3;:18;;:37;;;;;939:9;;933:3;:15;911:37;903:63;;;;;-1:-1:-1;;;903:63:2;;;;;;;;;;;;-1:-1:-1;;;903:63:2;;;;;;;;;;;;;;;708:8;;;;707:9;699:40;;;;;-1:-1:-1;;;699:40:2;;;;;;;;;;;;-1:-1:-1;;;699:40:2;;;;;;;;;;;;;;;2077:8;:15;;-1:-1:-1;;2077:15:2;2088:4;2077:15;;;2107:30;;;2133:3;2107:30;;;;2121:10;;2107:30;;;;;;;;;;2010:134::o;2725:176::-;544:8;;;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2795:8;:16;;-1:-1:-1;;2795:16:2;;;2826:28;;;2850:3;2826:28;;;;2838:10;;2826:28;;;;;;;;;;2885:7;-1:-1:-1;;;;;2864:30:2;;1906:183:77;-1:-1:-1;;;;;1979:22:77;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:77;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:77;-1:-1:-1;;;;;2065:17:77;;;;;;;;;;1906:183::o",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\nimport \"../../contracts/dao/schemes/FeelessScheme.sol\";\nimport \"../../contracts/dao/schemes/ActivePeriod.sol\";\nimport \"./GoodReserveCDai.sol\";\n\n\ninterface StakingContract {\n    function collectUBIInterest(address recipient)\n        external\n        returns (uint256, uint256, uint256, uint32);\n}\n\n\n/**\n * @title GoodFundManager contract that transfer interest from the staking contract\n * to the reserve contract and transfer the return mintable tokens to the staking\n * contract\n * cDAI support only\n */\ncontract GoodFundManager is FeelessScheme, ActivePeriod {\n    using SafeMath for uint256;\n\n    // The address of cDai\n    ERC20 public cDai;\n\n    // The address of the reserve contract\n    // which recieves the funds from the\n    // staking contract\n    GoodReserveCDai public reserve;\n\n    // The address of the bridge contract\n    // which transfers in his turn the\n    // UBI funds to the given recipient\n    // address on the sidechain\n    address public bridgeContract;\n\n    // The recipient address on the\n    // sidechain. The bridge transfers\n    // the funds to the following address\n    address public ubiRecipient;\n\n    // Determines how many blocks should\n    // be passed before the next\n    // execution of `transferInterest`\n    uint256 public blockInterval;\n\n    // Last block number which `transferInterest`\n    // has been executed in\n    uint256 public lastTransferred;\n\n    // Emits when `transferInterest` transfers\n    // funds to the staking contract and to\n    // the bridge\n    event FundsTransferred(\n        // The caller address\n        address indexed caller,\n        // The staking contract address\n        address indexed staking,\n        // The reserve contract address\n        address indexed reserve,\n        // Amount of cDai that was transferred\n        // from the staking contract to the\n        // reserve contract\n        uint256 cDAIinterestEarned,\n        // How much interest has been donated\n        // according to the given donation\n        // ratio which determined in the\n        // staking contract\n        uint256 cDAIinterestDonated,\n        // The number of tokens that have been minted\n        // by the reserve to the staking contract\n        uint256 gdInterest,\n        // The number of tokens that have been minted\n        // by the reserve to the bridge which in his\n        // turn should transfer those funds to the\n        // sidechain\n        uint256 gdUBI\n    );\n\n    modifier reserveHasInitialized {\n        require(address(reserve) != address(0), \"reserve has not initialized\");\n        _;\n    }\n\n    /**\n     * @dev Constructor\n     * @param _avatar The avatar of the DAO\n     * @param _identity The identity contract\n     * @param _cDai The address of cDai\n     * @param _bridgeContract The address of the bridge contract\n     * @param _ubiRecipient The recipient address on the sidechain\n     * @param _blockInterval How many blocks should be passed before the next execution of `transferInterest\n     */\n    constructor(\n        Avatar _avatar,\n        Identity _identity,\n        address _cDai,\n        address _bridgeContract,\n        address _ubiRecipient,\n        uint256 _blockInterval\n    )\n        public\n        FeelessScheme(_identity, _avatar)\n        ActivePeriod(now, now * 2, _avatar)\n    {\n        cDai = ERC20(_cDai);\n        bridgeContract = _bridgeContract;\n        ubiRecipient = _ubiRecipient;\n        blockInterval = _blockInterval;\n        lastTransferred = block.number.div(blockInterval);\n    }\n\n    /**\n     * @dev Start function. Adds this contract to identity as a feeless scheme.\n     * Can only be called if scheme is registered\n     */\n    function start() public onlyRegistered {\n        addRights();\n        super.start();\n    }\n\n    /**\n     * @dev Sets the whitelisted reserve. Only Avatar\n     * can call this method.\n     * @param _reserve The new reserve to be whitelisted\n     */\n    function setReserve(GoodReserveCDai _reserve) public onlyAvatar {\n        reserve = _reserve;\n    }\n\n    /**\n     * @dev sets the token bridge address on mainnet and the recipient of minted UBI (avatar on sidechain)\n     * @param _bridgeContract address\n     * @param _recipient address\n     */\n\n    /**\n     * @dev Sets the bridge address on the current network and the recipient\n     * address on the sidechain. Only Avatar can call this method.\n     * @param _bridgeContract The new bridge address\n     * @param _recipient The new recipient address (NOTICE: this address may be a\n     * sidechain address)\n     */\n    function setBridgeAndUBIRecipient(\n        address _bridgeContract,\n        address _recipient\n    )\n        public\n        onlyAvatar\n    {\n        bridgeContract = _bridgeContract;\n        ubiRecipient = _recipient;\n    }\n\n    /**\n     * @dev Allows the DAO to change the block interval\n     * @param _blockInterval the new interval value\n     */\n    function setBlockInterval(\n        uint256 _blockInterval\n    )\n        public\n        onlyAvatar\n    {\n        blockInterval = _blockInterval;\n    }\n\n    /**\n     * @dev Checks if enough time has passed away since the\n     * last funds transfer time\n     * @return (bool) True if enough time has passed\n     */\n    function canRun() public view returns(bool)\n    {\n        return block.number.div(blockInterval) > lastTransferred;\n    }\n\n    /**\n     * @dev Collects UBI interest in cDai from a given staking contract and transfers\n     * that interest to the reserve contract. Then transfers the given gd which\n     * received from the reserve contract back to the staking contract and to the\n     * bridge, which locks the funds and then the GD tokens are been minted to the\n     * given address on the sidechain\n     * @param _staking Contract that implements `collectUBIInterest` and transfer cDai to\n     * a given address. The given address should be the same whitelisted `reserve`\n     * address in the current contract, in case that the given staking contract transfers\n     * the funds to another contract, zero GD tokens will be minted by the reserve contract.\n     * Emits `FundsTransferred` event in case which interest has been passed to the `reserve`\n     */\n    function transferInterest(StakingContract _staking)\n        public\n        requireActive\n        reserveHasInitialized\n        requireDAOContract(address(_staking))\n    {\n        require(\n            canRun(),\n            \"Need to wait for the next interval\"\n        );\n\n        lastTransferred = block.number.div(blockInterval);\n\n        // cDai balance of the reserve contract\n        uint256 currentBalance = cDai.balanceOf(address(reserve));\n\n        // Collects the interest from the staking contract and transfers\n        // it directly to the reserve contract. `collectUBIInterest` returns\n        // (cdaigains, daigains, precission loss, donation ratio)\n        (, , , uint32 donationRatio) = _staking.collectUBIInterest(\n            address(reserve)\n        );\n\n        // Finds the actual transferred cDai\n        uint256 interest = cDai.balanceOf(address(reserve)).sub(\n            currentBalance\n        );\n\n        uint256 interestDonated = interest.mul(donationRatio).div(1e6);\n        uint256 afterDonation = interest.sub(interestDonated);\n        // Mints gd while the interest amount is equal to the transferred amount\n        (uint256 gdInterest, uint256 gdUBI) = reserve.mintInterestAndUBI(\n            cDai,\n            interest,\n            afterDonation\n        );\n        // Transfers the minted tokens to the given staking contract\n        GoodDollar token = GoodDollar(address(avatar.nativeToken()));\n        if(gdInterest > 0)\n            require(token.transfer(address(_staking), gdInterest),\"interest transfer failed\");\n        if(gdUBI > 0)\n            //transfer ubi to avatar on sidechain via bridge\n            require(token.transferAndCall(\n                bridgeContract,\n                gdUBI,\n                abi.encodePacked(ubiRecipient)\n            ),\"ubi bridge transfer failed\");\n        emit FundsTransferred(\n            msg.sender,\n            address(_staking),\n            address(reserve),\n            interest,\n            interestDonated,\n            gdInterest,\n            gdUBI\n        );\n    }\n\n    /**\n     * @dev Making the contract inactive after it has transferred funds to `_avatar`.\n     * Only the avatar can destroy the contract.\n     */\n    function end() public onlyAvatar {\n        // Transfers the remaining amount of cDai and GD to the avatar\n        uint256 remainingCDaiReserve = cDai.balanceOf(address(this));\n        if (remainingCDaiReserve > 0) {\n            require(cDai.transfer(address(avatar), remainingCDaiReserve),\"cdai transfer failed\");\n        }\n        GoodDollar token = GoodDollar(address(avatar.nativeToken()));\n        uint256 remainingGDReserve = token.balanceOf(address(this));\n        if (remainingGDReserve > 0) {\n            require(token.transfer(address(avatar), remainingGDReserve),\"gd transfer failed\");\n        }\n        super.internalEnd(avatar);\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodFundManager.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodFundManager.sol",
    "exportedSymbols": {
      "GoodFundManager": [
        7371
      ],
      "StakingContract": [
        6981
      ]
    },
    "id": 7372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6961,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 6962,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 21309,
        "src": "25:59:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 6963,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 21850,
        "src": "85:63:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 6964,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 12706,
        "src": "149:55:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 6965,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 1228,
        "src": "205:55:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 6966,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 1005,
        "src": "261:54:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
        "file": "./GoodReserveCDai.sol",
        "id": 6967,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 9044,
        "src": "316:31:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 6981,
        "linearizedBaseContracts": [
          6981
        ],
        "name": "StakingContract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 6980,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "collectUBIInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6969,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "410:17:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "410:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "409:19:24"
            },
            "returnParameters": {
              "id": 6979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6972,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "463:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "472:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6973,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "472:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6976,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "481:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6975,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "481:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6978,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "490:6:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 6977,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "490:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "462:35:24"
            },
            "scope": 6981,
            "src": "382:116:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 7372,
        "src": "350:150:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6982,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "738:13:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 6983,
            "nodeType": "InheritanceSpecifier",
            "src": "738:13:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6984,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "753:12:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 6985,
            "nodeType": "InheritanceSpecifier",
            "src": "753:12:24"
          }
        ],
        "contractDependencies": [
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title GoodFundManager contract that transfer interest from the staking contract\nto the reserve contract and transfer the return mintable tokens to the staking\ncontract\ncDAI support only",
        "fullyImplemented": true,
        "id": 7371,
        "linearizedBaseContracts": [
          7371,
          1004,
          1227,
          2667,
          1423,
          21417
        ],
        "name": "GoodFundManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6988,
            "libraryName": {
              "contractScope": null,
              "id": 6986,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "778:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "772:27:24",
            "typeName": {
              "id": 6987,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "791:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 6990,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "832:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 6989,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "832:5:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6992,
            "name": "reserve",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "964:30:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
              "typeString": "contract GoodReserveCDai"
            },
            "typeName": {
              "contractScope": null,
              "id": 6991,
              "name": "GoodReserveCDai",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9043,
              "src": "964:15:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                "typeString": "contract GoodReserveCDai"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6994,
            "name": "bridgeContract",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1154:29:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6993,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1154:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6996,
            "name": "ubiRecipient",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1307:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6995,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1307:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6998,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1454:28:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6997,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1454:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7000,
            "name": "lastTransferred",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1567:30:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6999,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1567:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7016,
            "name": "FundsTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7002,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1775:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1775:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7004,
                  "indexed": true,
                  "name": "staking",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1847:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1847:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7006,
                  "indexed": true,
                  "name": "reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1920:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7008,
                  "indexed": false,
                  "name": "cDAIinterestEarned",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2072:26:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2072:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7010,
                  "indexed": false,
                  "name": "cDAIinterestDonated",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2266:27:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7009,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2266:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7012,
                  "indexed": false,
                  "name": "gdInterest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2407:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2407:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7014,
                  "indexed": false,
                  "name": "gdUBI",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2614:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2614:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1735:898:24"
            },
            "src": "1713:921:24"
          },
          {
            "body": {
              "id": 7030,
              "nodeType": "Block",
              "src": "2671:98:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7020,
                              "name": "reserve",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6992,
                              "src": "2697:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                "typeString": "contract GoodReserveCDai"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                "typeString": "contract GoodReserveCDai"
                              }
                            ],
                            "id": 7019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2689:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2689:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2717:1:24",
                              "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": 7022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2709:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2709:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2689:30:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265736572766520686173206e6f7420696e697469616c697a6564",
                        "id": 7026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2721:29:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_70ac929c0b210ce58f4f04e14bf730234d3522ff8e5ae96ca3bb964e8cc8b2f1",
                          "typeString": "literal_string \"reserve has not initialized\""
                        },
                        "value": "reserve has not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_70ac929c0b210ce58f4f04e14bf730234d3522ff8e5ae96ca3bb964e8cc8b2f1",
                          "typeString": "literal_string \"reserve has not initialized\""
                        }
                      ],
                      "id": 7018,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2681:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2681:70:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7028,
                  "nodeType": "ExpressionStatement",
                  "src": "2681:70:24"
                },
                {
                  "id": 7029,
                  "nodeType": "PlaceholderStatement",
                  "src": "2761:1:24"
                }
              ]
            },
            "documentation": null,
            "id": 7031,
            "name": "reserveHasInitialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2671:0:24"
            },
            "src": "2640:129:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7083,
              "nodeType": "Block",
              "src": "3480:215:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7057,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6990,
                      "src": "3490:4:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7059,
                          "name": "_cDai",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7037,
                          "src": "3503:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 7058,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21849,
                        "src": "3497:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$21849_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "id": 7060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3497:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "3490:19:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 7062,
                  "nodeType": "ExpressionStatement",
                  "src": "3490:19:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7063,
                      "name": "bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6994,
                      "src": "3519:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7064,
                      "name": "_bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7039,
                      "src": "3536:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3519:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7066,
                  "nodeType": "ExpressionStatement",
                  "src": "3519:32:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7067,
                      "name": "ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6996,
                      "src": "3561:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7068,
                      "name": "_ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7041,
                      "src": "3576:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3561:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7070,
                  "nodeType": "ExpressionStatement",
                  "src": "3561:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7071,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6998,
                      "src": "3599:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7072,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7043,
                      "src": "3615:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3599:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7074,
                  "nodeType": "ExpressionStatement",
                  "src": "3599:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7075,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "3639:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7079,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "3674:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7076,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "3657:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3657:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "3657:16:24",
                        "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": 7080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3657:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3639:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7082,
                  "nodeType": "ExpressionStatement",
                  "src": "3639:49:24"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _cDai The address of cDai\n@param _bridgeContract The address of the bridge contract\n@param _ubiRecipient The recipient address on the sidechain\n@param _blockInterval How many blocks should be passed before the next execution of `transferInterest",
            "id": 7084,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7046,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7035,
                    "src": "3412:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7047,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7033,
                    "src": "3423:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7048,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7045,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "3398:13:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3398:33:24"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7050,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "3453:3:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7051,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "3458:3:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 7052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3464:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "3458:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7054,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7033,
                    "src": "3467:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7049,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "3440:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3440:35:24"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7033,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3207:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7032,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3207:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7035,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3231:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7034,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "3231:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7037,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3259:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7036,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3259:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7039,
                  "name": "_bridgeContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3282:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3282:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7041,
                  "name": "_ubiRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3315:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7043,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3346:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7042,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3346:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3197:177:24"
            },
            "returnParameters": {
              "id": 7056,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3480:0:24"
            },
            "scope": 7371,
            "src": "3186:509:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7097,
              "nodeType": "Block",
              "src": "3886:51:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7089,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "3896:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3896:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7091,
                  "nodeType": "ExpressionStatement",
                  "src": "3896:11:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7092,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22320,
                        "src": "3917:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodFundManager_$7371",
                          "typeString": "contract super GoodFundManager"
                        }
                      },
                      "id": 7094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "3917:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3917:13:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7096,
                  "nodeType": "ExpressionStatement",
                  "src": "3917:13:24"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 7098,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7087,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7086,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "3871:14:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3871:14:24"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3861:2:24"
            },
            "returnParameters": {
              "id": 7088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3886:0:24"
            },
            "scope": 7371,
            "src": "3847:90:24",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7109,
              "nodeType": "Block",
              "src": "4163:35:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7105,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6992,
                      "src": "4173:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                        "typeString": "contract GoodReserveCDai"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7106,
                      "name": "_reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7100,
                      "src": "4183:8:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                        "typeString": "contract GoodReserveCDai"
                      }
                    },
                    "src": "4173:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "id": 7108,
                  "nodeType": "ExpressionStatement",
                  "src": "4173:18:24"
                }
              ]
            },
            "documentation": "@dev Sets the whitelisted reserve. Only Avatar\ncan call this method.\n@param _reserve The new reserve to be whitelisted",
            "id": 7110,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7103,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7102,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4152:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4152:10:24"
              }
            ],
            "name": "setReserve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7100,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 7110,
                  "src": "4119:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7099,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "4119:15:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4118:26:24"
            },
            "returnParameters": {
              "id": 7104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4163:0:24"
            },
            "scope": 7371,
            "src": "4099:99:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7127,
              "nodeType": "Block",
              "src": "4859:84:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7119,
                      "name": "bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6994,
                      "src": "4869:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7120,
                      "name": "_bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7112,
                      "src": "4886:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4869:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7122,
                  "nodeType": "ExpressionStatement",
                  "src": "4869:32:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7123,
                      "name": "ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6996,
                      "src": "4911:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7124,
                      "name": "_recipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7114,
                      "src": "4926:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4911:25:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7126,
                  "nodeType": "ExpressionStatement",
                  "src": "4911:25:24"
                }
              ]
            },
            "documentation": "@dev Sets the bridge address on the current network and the recipient\naddress on the sidechain. Only Avatar can call this method.\n@param _bridgeContract The new bridge address\n@param _recipient The new recipient address (NOTICE: this address may be a\nsidechain address)",
            "id": 7128,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7116,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4844:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4844:10:24"
              }
            ],
            "name": "setBridgeAndUBIRecipient",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7112,
                  "name": "_bridgeContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 7128,
                  "src": "4763:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7111,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4763:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7114,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7128,
                  "src": "4796:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4796:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4753:67:24"
            },
            "returnParameters": {
              "id": 7118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4859:0:24"
            },
            "scope": 7371,
            "src": "4720:223:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7139,
              "nodeType": "Block",
              "src": "5175:47:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7135,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6998,
                      "src": "5185:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7136,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7130,
                      "src": "5201:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5185:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7138,
                  "nodeType": "ExpressionStatement",
                  "src": "5185:30:24"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new interval value",
            "id": 7140,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7133,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7132,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "5160:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5160:10:24"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7130,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 7140,
                  "src": "5108:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5108:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5098:38:24"
            },
            "returnParameters": {
              "id": 7134,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5175:0:24"
            },
            "scope": 7371,
            "src": "5073:149:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "5437:73:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7148,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "5471:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7145,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5454:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5454:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5454:16:24",
                        "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": 7149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5454:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7150,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "5488:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5454:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7144,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "5447:56:24"
                }
              ]
            },
            "documentation": "@dev Checks if enough time has passed away since the\nlast funds transfer time\n@return (bool) True if enough time has passed",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canRun",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5404:2:24"
            },
            "returnParameters": {
              "id": 7144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "5427:4:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5427:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5426:6:24"
            },
            "scope": 7371,
            "src": "5389:121:24",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7297,
              "nodeType": "Block",
              "src": "6520:1878:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 7169,
                          "name": "canRun",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7154,
                          "src": "6551:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 7170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6551:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 7171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6573:36:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 7168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "6530:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6530:89:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7173,
                  "nodeType": "ExpressionStatement",
                  "src": "6530:89:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7174,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "6630:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7178,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "6665:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7175,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "6648:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6648:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "6648:16:24",
                        "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": 7179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6648:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6630:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7181,
                  "nodeType": "ExpressionStatement",
                  "src": "6630:49:24"
                },
                {
                  "assignments": [
                    7183
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7183,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "6738:22:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7182,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6738:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7190,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7187,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "6786:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6778:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6778:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7184,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "6763:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 7185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "6763:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6763:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6738:57:24"
                },
                {
                  "assignments": [
                    null,
                    null,
                    null,
                    7192
                  ],
                  "declarations": [
                    null,
                    null,
                    null,
                    {
                      "constant": false,
                      "id": 7192,
                      "name": "donationRatio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7029:20:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7191,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7029:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7199,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7196,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "7102:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7094:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7094:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7193,
                        "name": "_staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "7053:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      },
                      "id": 7194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "collectUBIInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6980,
                      "src": "7053:27:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$",
                        "typeString": "function (address) external returns (uint256,uint256,uint256,uint32)"
                      }
                    },
                    "id": 7198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:67:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7022:98:24"
                },
                {
                  "assignments": [
                    7201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7201,
                      "name": "interest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7176:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7200,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7176:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7211,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7209,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7183,
                        "src": "7245:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7205,
                                "name": "reserve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6992,
                                "src": "7218:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 7204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7210:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 7206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7210:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7202,
                            "name": "cDai",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6990,
                            "src": "7195:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 7203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21458,
                          "src": "7195:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 7207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7195:32:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "7195:36:24",
                      "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": 7210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7195:74:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7176:93:24"
                },
                {
                  "assignments": [
                    7213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7213,
                      "name": "interestDonated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7280:23:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7212,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7280:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "316536",
                        "id": 7219,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7338:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        },
                        "value": "1e6"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7216,
                            "name": "donationRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7192,
                            "src": "7319:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7214,
                            "name": "interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7201,
                            "src": "7306:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "7306:12:24",
                          "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": 7217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7306:27:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "7306:31:24",
                      "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": 7220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7306:36:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7280:62:24"
                },
                {
                  "assignments": [
                    7223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7223,
                      "name": "afterDonation",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7352:21:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7352:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7228,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7226,
                        "name": "interestDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7213,
                        "src": "7389:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7224,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "7376:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "7376:12:24",
                      "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": 7227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7376:29:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7352:53:24"
                },
                {
                  "assignments": [
                    7230,
                    7232
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7230,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7497:18:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7229,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7497:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7232,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7517:13:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7231,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7517:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7239,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7235,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "7574:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7236,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "7592:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7237,
                        "name": "afterDonation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7223,
                        "src": "7614:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7233,
                        "name": "reserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6992,
                        "src": "7534:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      "id": 7234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterestAndUBI",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8946,
                      "src": "7534:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256,uint256)"
                      }
                    },
                    "id": 7238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7534:103:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7496:141:24"
                },
                {
                  "assignments": [
                    7241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7241,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7716:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7240,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "7716:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7244,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "7754:6:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "7754:18:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7754:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7746:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7746:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7242,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "7735:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7735:41:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7716:60:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7250,
                      "name": "gdInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7230,
                      "src": "7789:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7802:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7789:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7264,
                  "nodeType": "IfStatement",
                  "src": "7786:112:24",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7257,
                                  "name": "_staking",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7156,
                                  "src": "7848:8:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                                    "typeString": "contract StakingContract"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                                    "typeString": "contract StakingContract"
                                  }
                                ],
                                "id": 7256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7840:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7840:17:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7259,
                              "name": "gdInterest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7230,
                              "src": "7859:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7254,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7241,
                              "src": "7825:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                "typeString": "contract GoodDollar"
                              }
                            },
                            "id": 7255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3453,
                            "src": "7825:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 7260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7825:45:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "696e746572657374207472616e73666572206661696c6564",
                          "id": 7261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7871:26:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_ac623f841902cf7a0f36c2ceb6f2b095b510c3d55e149fa03cd8118a4999acde",
                            "typeString": "literal_string \"interest transfer failed\""
                          },
                          "value": "interest transfer failed"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_ac623f841902cf7a0f36c2ceb6f2b095b510c3d55e149fa03cd8118a4999acde",
                            "typeString": "literal_string \"interest transfer failed\""
                          }
                        ],
                        "id": 7253,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22174,
                          22175
                        ],
                        "referencedDeclaration": 22175,
                        "src": "7817:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 7262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7817:81:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7263,
                    "nodeType": "ExpressionStatement",
                    "src": "7817:81:24"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7265,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7232,
                      "src": "7911:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7919:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7911:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7281,
                  "nodeType": "IfStatement",
                  "src": "7908:263:24",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7271,
                              "name": "bridgeContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6994,
                              "src": "8042:14:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7272,
                              "name": "gdUBI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7232,
                              "src": "8074:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7275,
                                  "name": "ubiRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6996,
                                  "src": "8114:12:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7273,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22158,
                                  "src": "8097:3:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7274,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "8097:16:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 7276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8097:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7269,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7241,
                              "src": "8003:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                "typeString": "contract GoodDollar"
                              }
                            },
                            "id": 7270,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferAndCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3524,
                            "src": "8003:21:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,uint256,bytes memory) external returns (bool)"
                            }
                          },
                          "id": 7277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8003:138:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "75626920627269646765207472616e73666572206661696c6564",
                          "id": 7278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8142:28:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_63d1a073496b3cb6f63032c60295d8100640909579ac1b4c2ec6e19e5e3352bb",
                            "typeString": "literal_string \"ubi bridge transfer failed\""
                          },
                          "value": "ubi bridge transfer failed"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_63d1a073496b3cb6f63032c60295d8100640909579ac1b4c2ec6e19e5e3352bb",
                            "typeString": "literal_string \"ubi bridge transfer failed\""
                          }
                        ],
                        "id": 7268,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22174,
                          22175
                        ],
                        "referencedDeclaration": 22175,
                        "src": "7995:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 7279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7995:176:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7280,
                    "nodeType": "ExpressionStatement",
                    "src": "7995:176:24"
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7283,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8216:3:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8216:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7286,
                            "name": "_staking",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7156,
                            "src": "8248:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_StakingContract_$6981",
                              "typeString": "contract StakingContract"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_StakingContract_$6981",
                              "typeString": "contract StakingContract"
                            }
                          ],
                          "id": 7285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8240:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8240:17:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7289,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "8279:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8271:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8271:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7291,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "8301:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7292,
                        "name": "interestDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7213,
                        "src": "8323:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7293,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7230,
                        "src": "8352:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7294,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7232,
                        "src": "8376:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7282,
                      "name": "FundsTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7016,
                      "src": "8186:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8186:205:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7296,
                  "nodeType": "EmitStatement",
                  "src": "8181:210:24"
                }
              ]
            },
            "documentation": "@dev Collects UBI interest in cDai from a given staking contract and transfers\nthat interest to the reserve contract. Then transfers the given gd which\nreceived from the reserve contract back to the staking contract and to the\nbridge, which locks the funds and then the GD tokens are been minted to the\ngiven address on the sidechain\n@param _staking Contract that implements `collectUBIInterest` and transfer cDai to\na given address. The given address should be the same whitelisted `reserve`\naddress in the current contract, in case that the given staking contract transfers\nthe funds to another contract, zero GD tokens will be minted by the reserve contract.\nEmits `FundsTransferred` event in case which interest has been passed to the `reserve`",
            "id": 7298,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7158,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "6426:13:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6426:13:24"
              },
              {
                "arguments": null,
                "id": 7161,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7160,
                  "name": "reserveHasInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7031,
                  "src": "6448:21:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6448:21:24"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7164,
                        "name": "_staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "6505:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      ],
                      "id": 7163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6497:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6497:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7166,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7162,
                  "name": "requireDAOContract",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2617,
                  "src": "6478:18:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6478:37:24"
              }
            ],
            "name": "transferInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7156,
                  "name": "_staking",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "6377:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                    "typeString": "contract StakingContract"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7155,
                    "name": "StakingContract",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6981,
                    "src": "6377:15:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StakingContract_$6981",
                      "typeString": "contract StakingContract"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6376:26:24"
            },
            "returnParameters": {
              "id": 7167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6520:0:24"
            },
            "scope": 7371,
            "src": "6351:2047:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7369,
              "nodeType": "Block",
              "src": "8588:613:24",
              "statements": [
                {
                  "assignments": [
                    7304
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7304,
                      "name": "remainingCDaiReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8669:28:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7303,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8669:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7311,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7308,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22319,
                            "src": "8723:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          ],
                          "id": 7307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8715:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8715:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7305,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "8700:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 7306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "8700:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8700:29:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8669:60:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7312,
                      "name": "remainingCDaiReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7304,
                      "src": "8743:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8766:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8743:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7327,
                  "nodeType": "IfStatement",
                  "src": "8739:139:24",
                  "trueBody": {
                    "id": 7326,
                    "nodeType": "Block",
                    "src": "8769:109:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7319,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "8813:6:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 7318,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8805:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8805:15:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7321,
                                  "name": "remainingCDaiReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7304,
                                  "src": "8822:20:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7316,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6990,
                                  "src": "8791:4:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$21849",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 7317,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21493,
                                "src": "8791:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 7322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8791:52:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 7323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8844:22:24",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 7315,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "8783:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8783:84:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7325,
                        "nodeType": "ExpressionStatement",
                        "src": "8783:84:24"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7329
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7329,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8887:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7328,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "8887:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7337,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7332,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "8925:6:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "8925:18:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8925:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8917:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8917:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7330,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "8906:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8906:41:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8887:60:24"
                },
                {
                  "assignments": [
                    7339
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7339,
                      "name": "remainingGDReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8957:26:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7338,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8957:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7346,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7343,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22319,
                            "src": "9010:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          ],
                          "id": 7342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9002:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9002:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7340,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7329,
                        "src": "8986:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 7341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "8986:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8986:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8957:59:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7347,
                      "name": "remainingGDReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7339,
                      "src": "9030:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9051:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9030:22:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7362,
                  "nodeType": "IfStatement",
                  "src": "9026:134:24",
                  "trueBody": {
                    "id": 7361,
                    "nodeType": "Block",
                    "src": "9054:106:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7354,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "9099:6:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 7353,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "9091:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9091:15:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7356,
                                  "name": "remainingGDReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7339,
                                  "src": "9108:18:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7351,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7329,
                                  "src": "9076:5:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                    "typeString": "contract GoodDollar"
                                  }
                                },
                                "id": 7352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3453,
                                "src": "9076:14:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 7357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9076:51:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "6764207472616e73666572206661696c6564",
                              "id": 7358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9128:20:24",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5dd418a8e765db37cf0eaf6ad0232491f5805a60a4c38e8be6a9137c6f0b662a",
                                "typeString": "literal_string \"gd transfer failed\""
                              },
                              "value": "gd transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5dd418a8e765db37cf0eaf6ad0232491f5805a60a4c38e8be6a9137c6f0b662a",
                                "typeString": "literal_string \"gd transfer failed\""
                              }
                            ],
                            "id": 7350,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "9068:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9068:81:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7360,
                        "nodeType": "ExpressionStatement",
                        "src": "9068:81:24"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7366,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "9187:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7363,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22320,
                        "src": "9169:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodFundManager_$7371",
                          "typeString": "contract super GoodFundManager"
                        }
                      },
                      "id": 7365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "9169:17:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 7367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9169:25:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7368,
                  "nodeType": "ExpressionStatement",
                  "src": "9169:25:24"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred funds to `_avatar`.\nOnly the avatar can destroy the contract.",
            "id": 7370,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7301,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7300,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "8577:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8577:10:24"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8567:2:24"
            },
            "returnParameters": {
              "id": 7302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8588:0:24"
            },
            "scope": 7371,
            "src": "8555:646:24",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          }
        ],
        "scope": 7372,
        "src": "710:8493:24"
      }
    ],
    "src": "0:9204:24"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodFundManager.sol",
    "exportedSymbols": {
      "GoodFundManager": [
        7371
      ],
      "StakingContract": [
        6981
      ]
    },
    "id": 7372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6961,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 6962,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 21309,
        "src": "25:59:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 6963,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 21850,
        "src": "85:63:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 6964,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 12706,
        "src": "149:55:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 6965,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 1228,
        "src": "205:55:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 6966,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 1005,
        "src": "261:54:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
        "file": "./GoodReserveCDai.sol",
        "id": 6967,
        "nodeType": "ImportDirective",
        "scope": 7372,
        "sourceUnit": 9044,
        "src": "316:31:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 6981,
        "linearizedBaseContracts": [
          6981
        ],
        "name": "StakingContract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 6980,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "collectUBIInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6969,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "410:17:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "410:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "409:19:24"
            },
            "returnParameters": {
              "id": 6979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6972,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "463:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "472:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6973,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "472:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6976,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "481:7:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6975,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "481:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6978,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6980,
                  "src": "490:6:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 6977,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "490:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "462:35:24"
            },
            "scope": 6981,
            "src": "382:116:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 7372,
        "src": "350:150:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6982,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "738:13:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 6983,
            "nodeType": "InheritanceSpecifier",
            "src": "738:13:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6984,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "753:12:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 6985,
            "nodeType": "InheritanceSpecifier",
            "src": "753:12:24"
          }
        ],
        "contractDependencies": [
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title GoodFundManager contract that transfer interest from the staking contract\nto the reserve contract and transfer the return mintable tokens to the staking\ncontract\ncDAI support only",
        "fullyImplemented": true,
        "id": 7371,
        "linearizedBaseContracts": [
          7371,
          1004,
          1227,
          2667,
          1423,
          21417
        ],
        "name": "GoodFundManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6988,
            "libraryName": {
              "contractScope": null,
              "id": 6986,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "778:8:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "772:27:24",
            "typeName": {
              "id": 6987,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "791:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 6990,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "832:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 6989,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "832:5:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6992,
            "name": "reserve",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "964:30:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
              "typeString": "contract GoodReserveCDai"
            },
            "typeName": {
              "contractScope": null,
              "id": 6991,
              "name": "GoodReserveCDai",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9043,
              "src": "964:15:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                "typeString": "contract GoodReserveCDai"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6994,
            "name": "bridgeContract",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1154:29:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6993,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1154:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6996,
            "name": "ubiRecipient",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1307:27:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6995,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1307:7:24",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6998,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1454:28:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6997,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1454:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 7000,
            "name": "lastTransferred",
            "nodeType": "VariableDeclaration",
            "scope": 7371,
            "src": "1567:30:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6999,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1567:7:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 7016,
            "name": "FundsTransferred",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 7015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7002,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1775:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1775:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7004,
                  "indexed": true,
                  "name": "staking",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1847:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1847:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7006,
                  "indexed": true,
                  "name": "reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "1920:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7008,
                  "indexed": false,
                  "name": "cDAIinterestEarned",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2072:26:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2072:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7010,
                  "indexed": false,
                  "name": "cDAIinterestDonated",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2266:27:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7009,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2266:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7012,
                  "indexed": false,
                  "name": "gdInterest",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2407:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2407:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7014,
                  "indexed": false,
                  "name": "gdUBI",
                  "nodeType": "VariableDeclaration",
                  "scope": 7016,
                  "src": "2614:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2614:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1735:898:24"
            },
            "src": "1713:921:24"
          },
          {
            "body": {
              "id": 7030,
              "nodeType": "Block",
              "src": "2671:98:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7020,
                              "name": "reserve",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6992,
                              "src": "2697:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                "typeString": "contract GoodReserveCDai"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                "typeString": "contract GoodReserveCDai"
                              }
                            ],
                            "id": 7019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2689:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2689:16:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2717:1:24",
                              "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": 7022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2709:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2709:10:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2689:30:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265736572766520686173206e6f7420696e697469616c697a6564",
                        "id": 7026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2721:29:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_70ac929c0b210ce58f4f04e14bf730234d3522ff8e5ae96ca3bb964e8cc8b2f1",
                          "typeString": "literal_string \"reserve has not initialized\""
                        },
                        "value": "reserve has not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_70ac929c0b210ce58f4f04e14bf730234d3522ff8e5ae96ca3bb964e8cc8b2f1",
                          "typeString": "literal_string \"reserve has not initialized\""
                        }
                      ],
                      "id": 7018,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2681:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2681:70:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7028,
                  "nodeType": "ExpressionStatement",
                  "src": "2681:70:24"
                },
                {
                  "id": 7029,
                  "nodeType": "PlaceholderStatement",
                  "src": "2761:1:24"
                }
              ]
            },
            "documentation": null,
            "id": 7031,
            "name": "reserveHasInitialized",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 7017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2671:0:24"
            },
            "src": "2640:129:24",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7083,
              "nodeType": "Block",
              "src": "3480:215:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7057,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6990,
                      "src": "3490:4:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7059,
                          "name": "_cDai",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7037,
                          "src": "3503:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 7058,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21849,
                        "src": "3497:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$21849_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "id": 7060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3497:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "3490:19:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 7062,
                  "nodeType": "ExpressionStatement",
                  "src": "3490:19:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7063,
                      "name": "bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6994,
                      "src": "3519:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7064,
                      "name": "_bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7039,
                      "src": "3536:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3519:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7066,
                  "nodeType": "ExpressionStatement",
                  "src": "3519:32:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7067,
                      "name": "ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6996,
                      "src": "3561:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7068,
                      "name": "_ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7041,
                      "src": "3576:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3561:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7070,
                  "nodeType": "ExpressionStatement",
                  "src": "3561:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7071,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6998,
                      "src": "3599:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7072,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7043,
                      "src": "3615:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3599:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7074,
                  "nodeType": "ExpressionStatement",
                  "src": "3599:30:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7075,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "3639:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7079,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "3674:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7076,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "3657:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3657:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "3657:16:24",
                        "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": 7080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3657:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3639:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7082,
                  "nodeType": "ExpressionStatement",
                  "src": "3639:49:24"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _cDai The address of cDai\n@param _bridgeContract The address of the bridge contract\n@param _ubiRecipient The recipient address on the sidechain\n@param _blockInterval How many blocks should be passed before the next execution of `transferInterest",
            "id": 7084,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7046,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7035,
                    "src": "3412:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7047,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7033,
                    "src": "3423:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7048,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7045,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "3398:13:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3398:33:24"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 7050,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "3453:3:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7051,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "3458:3:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 7052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3464:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "3458:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 7054,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7033,
                    "src": "3467:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 7055,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7049,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "3440:12:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3440:35:24"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7033,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3207:14:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7032,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "3207:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7035,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3231:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7034,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "3231:8:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7037,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3259:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7036,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3259:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7039,
                  "name": "_bridgeContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3282:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7038,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3282:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7041,
                  "name": "_ubiRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3315:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7043,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 7084,
                  "src": "3346:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7042,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3346:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3197:177:24"
            },
            "returnParameters": {
              "id": 7056,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3480:0:24"
            },
            "scope": 7371,
            "src": "3186:509:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7097,
              "nodeType": "Block",
              "src": "3886:51:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 7089,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "3896:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3896:11:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7091,
                  "nodeType": "ExpressionStatement",
                  "src": "3896:11:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7092,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22320,
                        "src": "3917:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodFundManager_$7371",
                          "typeString": "contract super GoodFundManager"
                        }
                      },
                      "id": 7094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "3917:11:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 7095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3917:13:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7096,
                  "nodeType": "ExpressionStatement",
                  "src": "3917:13:24"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 7098,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7087,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7086,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "3871:14:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3871:14:24"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3861:2:24"
            },
            "returnParameters": {
              "id": 7088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3886:0:24"
            },
            "scope": 7371,
            "src": "3847:90:24",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7109,
              "nodeType": "Block",
              "src": "4163:35:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7105,
                      "name": "reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6992,
                      "src": "4173:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                        "typeString": "contract GoodReserveCDai"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7106,
                      "name": "_reserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7100,
                      "src": "4183:8:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                        "typeString": "contract GoodReserveCDai"
                      }
                    },
                    "src": "4173:18:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "id": 7108,
                  "nodeType": "ExpressionStatement",
                  "src": "4173:18:24"
                }
              ]
            },
            "documentation": "@dev Sets the whitelisted reserve. Only Avatar\ncan call this method.\n@param _reserve The new reserve to be whitelisted",
            "id": 7110,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7103,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7102,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4152:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4152:10:24"
              }
            ],
            "name": "setReserve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7100,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 7110,
                  "src": "4119:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7099,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "4119:15:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4118:26:24"
            },
            "returnParameters": {
              "id": 7104,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4163:0:24"
            },
            "scope": 7371,
            "src": "4099:99:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7127,
              "nodeType": "Block",
              "src": "4859:84:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7119,
                      "name": "bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6994,
                      "src": "4869:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7120,
                      "name": "_bridgeContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7112,
                      "src": "4886:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4869:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7122,
                  "nodeType": "ExpressionStatement",
                  "src": "4869:32:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7123,
                      "name": "ubiRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6996,
                      "src": "4911:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7124,
                      "name": "_recipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7114,
                      "src": "4926:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4911:25:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 7126,
                  "nodeType": "ExpressionStatement",
                  "src": "4911:25:24"
                }
              ]
            },
            "documentation": "@dev Sets the bridge address on the current network and the recipient\naddress on the sidechain. Only Avatar can call this method.\n@param _bridgeContract The new bridge address\n@param _recipient The new recipient address (NOTICE: this address may be a\nsidechain address)",
            "id": 7128,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7116,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "4844:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4844:10:24"
              }
            ],
            "name": "setBridgeAndUBIRecipient",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7112,
                  "name": "_bridgeContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 7128,
                  "src": "4763:23:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7111,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4763:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7114,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 7128,
                  "src": "4796:18:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4796:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4753:67:24"
            },
            "returnParameters": {
              "id": 7118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4859:0:24"
            },
            "scope": 7371,
            "src": "4720:223:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7139,
              "nodeType": "Block",
              "src": "5175:47:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7135,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6998,
                      "src": "5185:13:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7136,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7130,
                      "src": "5201:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5185:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7138,
                  "nodeType": "ExpressionStatement",
                  "src": "5185:30:24"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new interval value",
            "id": 7140,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7133,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7132,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "5160:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5160:10:24"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7130,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 7140,
                  "src": "5108:22:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5108:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5098:38:24"
            },
            "returnParameters": {
              "id": 7134,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5175:0:24"
            },
            "scope": 7371,
            "src": "5073:149:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "5437:73:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7148,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "5471:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7145,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5454:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5454:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5454:16:24",
                        "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": 7149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5454:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7150,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "5488:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5454:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 7144,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "5447:56:24"
                }
              ]
            },
            "documentation": "@dev Checks if enough time has passed away since the\nlast funds transfer time\n@return (bool) True if enough time has passed",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canRun",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5404:2:24"
            },
            "returnParameters": {
              "id": 7144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7143,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "5427:4:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7142,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5427:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5426:6:24"
            },
            "scope": 7371,
            "src": "5389:121:24",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7297,
              "nodeType": "Block",
              "src": "6520:1878:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 7169,
                          "name": "canRun",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7154,
                          "src": "6551:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 7170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6551:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 7171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6573:36:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 7168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "6530:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6530:89:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7173,
                  "nodeType": "ExpressionStatement",
                  "src": "6530:89:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7174,
                      "name": "lastTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7000,
                      "src": "6630:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7178,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6998,
                          "src": "6665:13:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7175,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "6648:5:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6648:12:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "6648:16:24",
                        "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": 7179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6648:31:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6630:49:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7181,
                  "nodeType": "ExpressionStatement",
                  "src": "6630:49:24"
                },
                {
                  "assignments": [
                    7183
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7183,
                      "name": "currentBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "6738:22:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7182,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6738:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7190,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7187,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "6786:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6778:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6778:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7184,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "6763:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 7185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "6763:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6763:32:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6738:57:24"
                },
                {
                  "assignments": [
                    null,
                    null,
                    null,
                    7192
                  ],
                  "declarations": [
                    null,
                    null,
                    null,
                    {
                      "constant": false,
                      "id": 7192,
                      "name": "donationRatio",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7029:20:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 7191,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7029:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7199,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7196,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "7102:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7094:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7094:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7193,
                        "name": "_staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "7053:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      },
                      "id": 7194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "collectUBIInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6980,
                      "src": "7053:27:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$",
                        "typeString": "function (address) external returns (uint256,uint256,uint256,uint32)"
                      }
                    },
                    "id": 7198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:67:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7022:98:24"
                },
                {
                  "assignments": [
                    7201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7201,
                      "name": "interest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7176:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7200,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7176:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7211,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7209,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7183,
                        "src": "7245:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7205,
                                "name": "reserve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6992,
                                "src": "7218:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 7204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7210:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 7206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7210:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7202,
                            "name": "cDai",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6990,
                            "src": "7195:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 7203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21458,
                          "src": "7195:14:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 7207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7195:32:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7208,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "7195:36:24",
                      "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": 7210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7195:74:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7176:93:24"
                },
                {
                  "assignments": [
                    7213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7213,
                      "name": "interestDonated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7280:23:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7212,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7280:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "316536",
                        "id": 7219,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7338:3:24",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        },
                        "value": "1e6"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7216,
                            "name": "donationRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7192,
                            "src": "7319:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7214,
                            "name": "interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7201,
                            "src": "7306:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21215,
                          "src": "7306:12:24",
                          "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": 7217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7306:27:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "7306:31:24",
                      "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": 7220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7306:36:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7280:62:24"
                },
                {
                  "assignments": [
                    7223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7223,
                      "name": "afterDonation",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7352:21:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7352:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7228,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7226,
                        "name": "interestDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7213,
                        "src": "7389:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7224,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "7376:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "7376:12:24",
                      "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": 7227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7376:29:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7352:53:24"
                },
                {
                  "assignments": [
                    7230,
                    7232
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7230,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7497:18:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7229,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7497:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7232,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7517:13:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7231,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7517:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7239,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7235,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "7574:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7236,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "7592:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7237,
                        "name": "afterDonation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7223,
                        "src": "7614:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7233,
                        "name": "reserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6992,
                        "src": "7534:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      "id": 7234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterestAndUBI",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8946,
                      "src": "7534:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256,uint256)"
                      }
                    },
                    "id": 7238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7534:103:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7496:141:24"
                },
                {
                  "assignments": [
                    7241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7241,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 7297,
                      "src": "7716:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7240,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "7716:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7249,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7244,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "7754:6:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "7754:18:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7754:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7746:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7247,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7746:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7242,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "7735:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7735:41:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7716:60:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7250,
                      "name": "gdInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7230,
                      "src": "7789:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7802:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7789:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7264,
                  "nodeType": "IfStatement",
                  "src": "7786:112:24",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7257,
                                  "name": "_staking",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7156,
                                  "src": "7848:8:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                                    "typeString": "contract StakingContract"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                                    "typeString": "contract StakingContract"
                                  }
                                ],
                                "id": 7256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7840:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7840:17:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7259,
                              "name": "gdInterest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7230,
                              "src": "7859:10:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7254,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7241,
                              "src": "7825:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                "typeString": "contract GoodDollar"
                              }
                            },
                            "id": 7255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3453,
                            "src": "7825:14:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 7260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7825:45:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "696e746572657374207472616e73666572206661696c6564",
                          "id": 7261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7871:26:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_ac623f841902cf7a0f36c2ceb6f2b095b510c3d55e149fa03cd8118a4999acde",
                            "typeString": "literal_string \"interest transfer failed\""
                          },
                          "value": "interest transfer failed"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_ac623f841902cf7a0f36c2ceb6f2b095b510c3d55e149fa03cd8118a4999acde",
                            "typeString": "literal_string \"interest transfer failed\""
                          }
                        ],
                        "id": 7253,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22174,
                          22175
                        ],
                        "referencedDeclaration": 22175,
                        "src": "7817:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 7262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7817:81:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7263,
                    "nodeType": "ExpressionStatement",
                    "src": "7817:81:24"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7265,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7232,
                      "src": "7911:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7919:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7911:9:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7281,
                  "nodeType": "IfStatement",
                  "src": "7908:263:24",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7271,
                              "name": "bridgeContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6994,
                              "src": "8042:14:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7272,
                              "name": "gdUBI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7232,
                              "src": "8074:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7275,
                                  "name": "ubiRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6996,
                                  "src": "8114:12:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7273,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22158,
                                  "src": "8097:3:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7274,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "8097:16:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 7276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8097:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7269,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7241,
                              "src": "8003:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                "typeString": "contract GoodDollar"
                              }
                            },
                            "id": 7270,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferAndCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3524,
                            "src": "8003:21:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,uint256,bytes memory) external returns (bool)"
                            }
                          },
                          "id": 7277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8003:138:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "75626920627269646765207472616e73666572206661696c6564",
                          "id": 7278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8142:28:24",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_63d1a073496b3cb6f63032c60295d8100640909579ac1b4c2ec6e19e5e3352bb",
                            "typeString": "literal_string \"ubi bridge transfer failed\""
                          },
                          "value": "ubi bridge transfer failed"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_63d1a073496b3cb6f63032c60295d8100640909579ac1b4c2ec6e19e5e3352bb",
                            "typeString": "literal_string \"ubi bridge transfer failed\""
                          }
                        ],
                        "id": 7268,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22174,
                          22175
                        ],
                        "referencedDeclaration": 22175,
                        "src": "7995:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 7279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7995:176:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 7280,
                    "nodeType": "ExpressionStatement",
                    "src": "7995:176:24"
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7283,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "8216:3:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8216:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7286,
                            "name": "_staking",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7156,
                            "src": "8248:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_StakingContract_$6981",
                              "typeString": "contract StakingContract"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_StakingContract_$6981",
                              "typeString": "contract StakingContract"
                            }
                          ],
                          "id": 7285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8240:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8240:17:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7289,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6992,
                            "src": "8279:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 7288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8271:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8271:16:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7291,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7201,
                        "src": "8301:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7292,
                        "name": "interestDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7213,
                        "src": "8323:15:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7293,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7230,
                        "src": "8352:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7294,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7232,
                        "src": "8376:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7282,
                      "name": "FundsTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7016,
                      "src": "8186:16:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 7295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8186:205:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7296,
                  "nodeType": "EmitStatement",
                  "src": "8181:210:24"
                }
              ]
            },
            "documentation": "@dev Collects UBI interest in cDai from a given staking contract and transfers\nthat interest to the reserve contract. Then transfers the given gd which\nreceived from the reserve contract back to the staking contract and to the\nbridge, which locks the funds and then the GD tokens are been minted to the\ngiven address on the sidechain\n@param _staking Contract that implements `collectUBIInterest` and transfer cDai to\na given address. The given address should be the same whitelisted `reserve`\naddress in the current contract, in case that the given staking contract transfers\nthe funds to another contract, zero GD tokens will be minted by the reserve contract.\nEmits `FundsTransferred` event in case which interest has been passed to the `reserve`",
            "id": 7298,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7158,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "6426:13:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6426:13:24"
              },
              {
                "arguments": null,
                "id": 7161,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7160,
                  "name": "reserveHasInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7031,
                  "src": "6448:21:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6448:21:24"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7164,
                        "name": "_staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "6505:8:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_StakingContract_$6981",
                          "typeString": "contract StakingContract"
                        }
                      ],
                      "id": 7163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6497:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6497:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7166,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7162,
                  "name": "requireDAOContract",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2617,
                  "src": "6478:18:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6478:37:24"
              }
            ],
            "name": "transferInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7156,
                  "name": "_staking",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "6377:24:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StakingContract_$6981",
                    "typeString": "contract StakingContract"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7155,
                    "name": "StakingContract",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6981,
                    "src": "6377:15:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StakingContract_$6981",
                      "typeString": "contract StakingContract"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6376:26:24"
            },
            "returnParameters": {
              "id": 7167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6520:0:24"
            },
            "scope": 7371,
            "src": "6351:2047:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 7369,
              "nodeType": "Block",
              "src": "8588:613:24",
              "statements": [
                {
                  "assignments": [
                    7304
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7304,
                      "name": "remainingCDaiReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8669:28:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7303,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8669:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7311,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7308,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22319,
                            "src": "8723:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          ],
                          "id": 7307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8715:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8715:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7305,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6990,
                        "src": "8700:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 7306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "8700:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8700:29:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8669:60:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7312,
                      "name": "remainingCDaiReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7304,
                      "src": "8743:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8766:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8743:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7327,
                  "nodeType": "IfStatement",
                  "src": "8739:139:24",
                  "trueBody": {
                    "id": 7326,
                    "nodeType": "Block",
                    "src": "8769:109:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7319,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "8813:6:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 7318,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8805:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8805:15:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7321,
                                  "name": "remainingCDaiReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7304,
                                  "src": "8822:20:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7316,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6990,
                                  "src": "8791:4:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$21849",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 7317,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 21493,
                                "src": "8791:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 7322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8791:52:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 7323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8844:22:24",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 7315,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "8783:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8783:84:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7325,
                        "nodeType": "ExpressionStatement",
                        "src": "8783:84:24"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7329
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7329,
                      "name": "token",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8887:16:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7328,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "8887:10:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7337,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 7332,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "8925:6:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 7333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "8925:18:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 7334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8925:20:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 7331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8917:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8917:29:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7330,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "8906:10:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 7336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8906:41:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8887:60:24"
                },
                {
                  "assignments": [
                    7339
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7339,
                      "name": "remainingGDReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 7369,
                      "src": "8957:26:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7338,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8957:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7346,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7343,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22319,
                            "src": "9010:4:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodFundManager_$7371",
                              "typeString": "contract GoodFundManager"
                            }
                          ],
                          "id": 7342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9002:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9002:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7340,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7329,
                        "src": "8986:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 7341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21458,
                      "src": "8986:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8986:30:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8957:59:24"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7347,
                      "name": "remainingGDReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7339,
                      "src": "9030:18:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9051:1:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9030:22:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7362,
                  "nodeType": "IfStatement",
                  "src": "9026:134:24",
                  "trueBody": {
                    "id": 7361,
                    "nodeType": "Block",
                    "src": "9054:106:24",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7354,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "9099:6:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 7353,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "9091:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9091:15:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 7356,
                                  "name": "remainingGDReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7339,
                                  "src": "9108:18:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7351,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7329,
                                  "src": "9076:5:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                    "typeString": "contract GoodDollar"
                                  }
                                },
                                "id": 7352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3453,
                                "src": "9076:14:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 7357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9076:51:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "6764207472616e73666572206661696c6564",
                              "id": 7358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9128:20:24",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5dd418a8e765db37cf0eaf6ad0232491f5805a60a4c38e8be6a9137c6f0b662a",
                                "typeString": "literal_string \"gd transfer failed\""
                              },
                              "value": "gd transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5dd418a8e765db37cf0eaf6ad0232491f5805a60a4c38e8be6a9137c6f0b662a",
                                "typeString": "literal_string \"gd transfer failed\""
                              }
                            ],
                            "id": 7350,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "9068:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9068:81:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7360,
                        "nodeType": "ExpressionStatement",
                        "src": "9068:81:24"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7366,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "9187:6:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7363,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22320,
                        "src": "9169:5:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodFundManager_$7371",
                          "typeString": "contract super GoodFundManager"
                        }
                      },
                      "id": 7365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "9169:17:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 7367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9169:25:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7368,
                  "nodeType": "ExpressionStatement",
                  "src": "9169:25:24"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred funds to `_avatar`.\nOnly the avatar can destroy the contract.",
            "id": 7370,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7301,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7300,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "8577:10:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8577:10:24"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8567:2:24"
            },
            "returnParameters": {
              "id": 7302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8588:0:24"
            },
            "scope": 7371,
            "src": "8555:646:24",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          }
        ],
        "scope": 7372,
        "src": "710:8493:24"
      }
    ],
    "src": "0:9204:24"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.253Z",
  "devdoc": {
    "methods": {
      "canRun()": {
        "details": "Checks if enough time has passed away since the last funds transfer time",
        "return": "(bool) True if enough time has passed"
      },
      "constructor": {
        "details": "Constructor",
        "params": {
          "_avatar": "The avatar of the DAO",
          "_blockInterval": "How many blocks should be passed before the next execution of `transferInterest",
          "_bridgeContract": "The address of the bridge contract",
          "_cDai": "The address of cDai",
          "_identity": "The identity contract",
          "_ubiRecipient": "The recipient address on the sidechain"
        }
      },
      "end()": {
        "details": "Making the contract inactive after it has transferred funds to `_avatar`. Only the avatar can destroy the contract."
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "setBlockInterval(uint256)": {
        "details": "Allows the DAO to change the block interval",
        "params": {
          "_blockInterval": "the new interval value"
        }
      },
      "setBridgeAndUBIRecipient(address,address)": {
        "details": "Sets the bridge address on the current network and the recipient address on the sidechain. Only Avatar can call this method.",
        "params": {
          "_bridgeContract": "The new bridge address",
          "_recipient": "The new recipient address (NOTICE: this address may be a sidechain address)"
        }
      },
      "setReserve(address)": {
        "details": "Sets the whitelisted reserve. Only Avatar can call this method.",
        "params": {
          "_reserve": "The new reserve to be whitelisted"
        }
      },
      "start()": {
        "details": "Start function. Adds this contract to identity as a feeless scheme. Can only be called if scheme is registered"
      },
      "transferInterest(address)": {
        "details": "Collects UBI interest in cDai from a given staking contract and transfers that interest to the reserve contract. Then transfers the given gd which received from the reserve contract back to the staking contract and to the bridge, which locks the funds and then the GD tokens are been minted to the given address on the sidechain",
        "params": {
          "_staking": "Contract that implements `collectUBIInterest` and transfer cDai to a given address. The given address should be the same whitelisted `reserve` address in the current contract, in case that the given staking contract transfers the funds to another contract, zero GD tokens will be minted by the reserve contract. Emits `FundsTransferred` event in case which interest has been passed to the `reserve`"
        }
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      }
    },
    "title": "GoodFundManager contract that transfer interest from the staking contract to the reserve contract and transfer the return mintable tokens to the staking contract cDAI support only"
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}