{
  "contractName": "DaiLendingService",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adapterAddress",
          "type": "address"
        }
      ],
      "name": "updateAdapter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPricePerFullShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "save",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "userShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "userDaiBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "GetUserGrossRevenue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "GetNetRevenue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sharesAmount",
          "type": "uint256"
        }
      ],
      "name": "WithdrawByShares",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "sharesAmount",
          "type": "uint256"
        }
      ],
      "name": "WithdrawBySharesOnly",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GetDaiLendingAdapterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "newServiceContract",
          "type": "address"
        }
      ],
      "name": "TransferAdapterContractOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"GetDaiLendingAdapterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetNetRevenue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetUserGrossRevenue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newServiceContract\",\"type\":\"address\"}],\"name\":\"TransferAdapterContractOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sharesAmount\",\"type\":\"uint256\"}],\"name\":\"WithdrawByShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sharesAmount\",\"type\":\"uint256\"}],\"name\":\"WithdrawBySharesOnly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricePerFullShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"save\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adapterAddress\",\"type\":\"address\"}],\"name\":\"updateAdapter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userDaiBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingService.sol\":\"DaiLendingService\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingAdapter.sol\":{\"keccak256\":\"0x924ca6556a656dce3c2237bc317deab7f9aa658fb0ba7b9b1c9cc2a2e8251415\",\"urls\":[\"bzz-raw://1a8f96f0d3d4b59ccc2ce3fc484c99cca53c5f1da955b5fb3536ac6df5a4999c\",\"dweb:/ipfs/Qmd8F8tATmviEmNuZ6J4k6yVzXBszkdqG4EdmXrZQnk6xf\"]},\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingService.sol\":{\"keccak256\":\"0x71d38e6536d9e46c6b458db5248af292d6d80a618c35364e30407fa94c330ce9\",\"urls\":[\"bzz-raw://700c0fd39a298d96f98d0e6ce8538daaed5c591e25781832a7baa7b0a3cc243b\",\"dweb:/ipfs/QmWi9QdQ8bWNb32VAQhTiKQUsLHvwoCsduUmiR3g2nFBXx\"]},\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/IDaiToken.sol\":{\"keccak256\":\"0xd67b30f9bc1f7175a241e5ec976f60ec5ba1fcd205cc7c2f23e7c930c8af0012\",\"urls\":[\"bzz-raw://5285f44631e805012333cb803ebec0b06f84ab0eebccd49c0277564d8ef212f5\",\"dweb:/ipfs/QmRvrXYwnBaEr7DAPnWHVkVBZM6PVHD8j7ZuAwZxhX3jYP\"]},\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/IERC20.sol\":{\"keccak256\":\"0xdb06133df15b4633b2d3006ec2e96cb434312b43357b5c205145695014884d9c\",\"urls\":[\"bzz-raw://01bbd5c896bd8ff6e3d52b7e19da4ba32e7f9c221c4b2b606ccc296b80b66364\",\"dweb:/ipfs/QmP6bHqUauTtn6TP9aNDtXNNbKm2HN2wSYnRx93WSCzdU4\"]},\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/IYDaiToken.sol\":{\"keccak256\":\"0xcf5aee549b59ebb144cef2a9a6489a8a5ce1288118f8dc0cf4971c1de016f132\",\"urls\":[\"bzz-raw://b30eaaa095aec679c260dfb5b5a9eb9519ec90e78ebac14b90f6e5c3818166f9\",\"dweb:/ipfs/QmR84mZr5Zhq81bcH1iUuq4CRDFs9VZnM3zMpL2SWpXDaE\"]},\"/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/OwnableService.sol\":{\"keccak256\":\"0x7eb61016d7abd0dbe2c7abbb1bf43f2dea3f9a6065c3b2eb95787c75347bb147\",\"urls\":[\"bzz-raw://ab719c6841a2ff93be73b88439545bc8918e9b526e58653e85fb195b7e461472\",\"dweb:/ipfs/QmaZv45hrYFHLJgkqG8WHKeRDAKK7KiC9cqhz8R5w5FDPR\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060008054600160a060020a031916331790556108cd806100326000396000f3fe608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480636583d12a116100a957806377c7b8fc1161008357806377c7b8fc146101e157806377f1a4af146101e957806382f9a869146101f1578063f2fde38b14610217576100ec565b80636583d12a146101995780636e0d5ff1146101b65780637057f929146101be576100ec565b80630bbea0d9146100f15780630db8d01e1461010b5780630fcf3b3e146101135780631b8620271461013b578063593669aa146101585780635b6b431d1461017c575b600080fd5b6100f961023d565b60408051918252519081900360200190f35b6100f96102d2565b6101396004803603602081101561012957600080fd5b5035600160a060020a0316610336565b005b6101396004803603602081101561015157600080fd5b5035610431565b61016061049d565b60408051600160a060020a039092168252519081900360200190f35b6101396004803603602081101561019257600080fd5b50356104ac565b610139600480360360208110156101af57600080fd5b5035610518565b6100f9610584565b610139600480360360408110156101d457600080fd5b50803590602001356105e8565b6100f9610677565b6100f96106d5565b6101396004803603602081101561020757600080fd5b5035600160a060020a0316610739565b6101396004803603602081101561022d57600080fd5b5035600160a060020a03166107e1565b600154604080517fa4d86fb40000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163a4d86fb4916024808301926020929190829003018186803b1580156102a157600080fd5b505afa1580156102b5573d6000803e3d6000fd5b505050506040513d60208110156102cb57600080fd5b5051905090565b600154604080517ff6a4b3d50000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163f6a4b3d5916024808301926020929190829003018186803b1580156102a157600080fd5b600054600160a060020a031633146103af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b600154604080517fa843c51f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151919092169163a843c51f91602480830192600092919082900301818387803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b5050505050565b600154604080517ffdd085cc000000000000000000000000000000000000000000000000000000008152600481018490523360248201529051600160a060020a039092169163fdd085cc9160448082019260009290919082900301818387803b15801561041657600080fd5b600154600160a060020a031690565b600154604080517f8353ffca000000000000000000000000000000000000000000000000000000008152600481018490523360248201529051600160a060020a0390921691638353ffca9160448082019260009290919082900301818387803b15801561041657600080fd5b600154604080517fef1dff55000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169163ef1dff559160448082019260009290919082900301818387803b15801561041657600080fd5b600154604080517f73faaf380000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a0316916373faaf38916024808301926020929190829003018186803b1580156102a157600080fd5b600154604080517fdfba295400000000000000000000000000000000000000000000000000000000815260048101859052336024820152604481018490529051600160a060020a039092169163dfba29549160648082019260009290919082900301818387803b15801561065b57600080fd5b505af115801561066f573d6000803e3d6000fd5b505050505050565b600154604080517fdf3b642d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163df3b642d916004808301926020929190829003018186803b1580156102a157600080fd5b600154604080517f2f4cbe380000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a031691632f4cbe38916024808301926020929190829003018186803b1580156102a157600080fd5b600054600160a060020a031633146107b257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461085a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b600054600160a060020a031615610894576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5056fea2646970667358221220c7fb5e79fb1735eb8442ce3e8e9864e906f205b962b564d2c468c1ebb19c8b4e64736f6c63430006060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480636583d12a116100a957806377c7b8fc1161008357806377c7b8fc146101e157806377f1a4af146101e957806382f9a869146101f1578063f2fde38b14610217576100ec565b80636583d12a146101995780636e0d5ff1146101b65780637057f929146101be576100ec565b80630bbea0d9146100f15780630db8d01e1461010b5780630fcf3b3e146101135780631b8620271461013b578063593669aa146101585780635b6b431d1461017c575b600080fd5b6100f961023d565b60408051918252519081900360200190f35b6100f96102d2565b6101396004803603602081101561012957600080fd5b5035600160a060020a0316610336565b005b6101396004803603602081101561015157600080fd5b5035610431565b61016061049d565b60408051600160a060020a039092168252519081900360200190f35b6101396004803603602081101561019257600080fd5b50356104ac565b610139600480360360208110156101af57600080fd5b5035610518565b6100f9610584565b610139600480360360408110156101d457600080fd5b50803590602001356105e8565b6100f9610677565b6100f96106d5565b6101396004803603602081101561020757600080fd5b5035600160a060020a0316610739565b6101396004803603602081101561022d57600080fd5b5035600160a060020a03166107e1565b600154604080517fa4d86fb40000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163a4d86fb4916024808301926020929190829003018186803b1580156102a157600080fd5b505afa1580156102b5573d6000803e3d6000fd5b505050506040513d60208110156102cb57600080fd5b5051905090565b600154604080517ff6a4b3d50000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a03169163f6a4b3d5916024808301926020929190829003018186803b1580156102a157600080fd5b600054600160a060020a031633146103af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b600154604080517fa843c51f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151919092169163a843c51f91602480830192600092919082900301818387803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b5050505050565b600154604080517ffdd085cc000000000000000000000000000000000000000000000000000000008152600481018490523360248201529051600160a060020a039092169163fdd085cc9160448082019260009290919082900301818387803b15801561041657600080fd5b600154600160a060020a031690565b600154604080517f8353ffca000000000000000000000000000000000000000000000000000000008152600481018490523360248201529051600160a060020a0390921691638353ffca9160448082019260009290919082900301818387803b15801561041657600080fd5b600154604080517fef1dff55000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169163ef1dff559160448082019260009290919082900301818387803b15801561041657600080fd5b600154604080517f73faaf380000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a0316916373faaf38916024808301926020929190829003018186803b1580156102a157600080fd5b600154604080517fdfba295400000000000000000000000000000000000000000000000000000000815260048101859052336024820152604481018490529051600160a060020a039092169163dfba29549160648082019260009290919082900301818387803b15801561065b57600080fd5b505af115801561066f573d6000803e3d6000fd5b505050505050565b600154604080517fdf3b642d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163df3b642d916004808301926020929190829003018186803b1580156102a157600080fd5b600154604080517f2f4cbe380000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a031691632f4cbe38916024808301926020929190829003018186803b1580156102a157600080fd5b600054600160a060020a031633146107b257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461085a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c000000604482015290519081900360640190fd5b600054600160a060020a031615610894576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5056fea2646970667358221220c7fb5e79fb1735eb8442ce3e8e9864e906f205b962b564d2c468c1ebb19c8b4e64736f6c63430006060033",
  "immutableReferences": {},
  "sourceMap": "60:2537:4:-:0;;;156:57;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;187:6:4;:19;;-1:-1:-1;;;;;;187:19:4;196:10;187:19;;;60:2537;;;;;;",
  "deployedSourceMap": "60:2537:4:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;60:2537:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1600:125:4;;;:::i;:::-;;;;;;;;;;;;;;;;980:123;;;:::i;2286:192::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2286:192:4;-1:-1:-1;;;;;2286:192:4;;:::i;:::-;;826:99;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;826:99:4;;:::i;2158:122::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2158:122:4;;;;;;;;;;;;;;1731:107;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1731:107:4;;:::i;2009:143::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2009:143:4;;:::i;1357:133::-;;;:::i;1844:159::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1844:159:4;;;;;;;:::i;494:129::-;;;:::i;1144:126::-;;;:::i;349:139::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;349:139:4;-1:-1:-1;;;;;349:139:4;;:::i;219:124::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;219:124:4;-1:-1:-1;;;;;219:124:4;;:::i;1600:125::-;1674:18;;:44;;;;;;1707:10;1674:44;;;;;;1648:7;;-1:-1:-1;;;;;1674:18:4;;:32;;:44;;;;;;;;;;;;;;:18;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;1674:44:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1674:44:4;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1674:44:4;;-1:-1:-1;1600:125:4;:::o;980:123::-;1051:18;;:45;;;;;;1085:10;1051:45;;;;;;1025:7;;-1:-1:-1;;;;;1051:18:4;;:33;;:45;;;;;;;;;;;;;;:18;:45;;;2:2:-1;;;;27:1;24;17:12;2286:192:4;2523:6;;-1:-1:-1;;;;;2523:6:4;2533:10;2523:20;2515:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2407:18:::1;::::0;:64:::1;::::0;;;;;-1:-1:-1;;;;;2407:64:4;;::::1;;::::0;::::1;::::0;;;:18;;;::::1;::::0;:44:::1;::::0;:64;;;;;:18:::1;::::0;:64;;;;;;;:18;;:64;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;2407:64:4;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2407:64:4;;;;2286:192:::0;:::o;826:99::-;875:18;;:43;;;;;;;;;;;;907:10;875:43;;;;;;-1:-1:-1;;;;;875:18:4;;;;:23;;:43;;;;;:18;;:43;;;;;;;;:18;;:43;;;2:2:-1;;;;27:1;24;17:12;2158:122:4;2254:18;;-1:-1:-1;;;;;2254:18:4;2158:122;:::o;1731:107::-;1784:18;;:47;;;;;;;;;;;;1820:10;1784:47;;;;;;-1:-1:-1;;;;;1784:18:4;;;;:27;;:47;;;;;:18;;:47;;;;;;;;:18;;:47;;;2:2:-1;;;;27:1;24;17:12;2009:143:4;2080:18;;:65;;;;;;2120:10;2080:65;;;;;;;;;;;;-1:-1:-1;;;;;2080:18:4;;;;:39;;:65;;;;;:18;;:65;;;;;;;;:18;;:65;;;2:2:-1;;;;27:1;24;17:12;1357:133:4;1437:18;;:46;;;;;;1472:10;1437:46;;;;;;1411:7;;-1:-1:-1;;;;;1437:18:4;;:34;;:46;;;;;;;;;;;;;;:18;:46;;;2:2:-1;;;;27:1;24;17:12;1844:159:4;1927:18;;:69;;;;;;;;;;;;1971:10;1927:69;;;;;;;;;;;;-1:-1:-1;;;;;1927:18:4;;;;:35;;:69;;;;;:18;;:69;;;;;;;;:18;;:69;;;2:2:-1;;;;27:1;24;17:12;2:2;1927:69:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1927:69:4;;;;1844:159;;:::o;494:129::-;575:18;;:41;;;;;;;;549:7;;-1:-1:-1;;;;;575:18:4;;:39;;:41;;;;;;;;;;;;;;:18;:41;;;2:2:-1;;;;27:1;24;17:12;1144:126:4;1219:18;;:44;;;;;;1252:10;1219:44;;;;;;1193:7;;-1:-1:-1;;;;;1219:18:4;;:32;;:44;;;;;;;;;;;;;;:18;:44;;;2:2:-1;;;;27:1;24;17:12;349:139:4;2523:6;;-1:-1:-1;;;;;2523:6:4;2533:10;2523:20;2515:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;427:18:::1;:54:::0;;-1:-1:-1;;427:54:4::1;-1:-1:-1::0;;;;;427:54:4;;;::::1;::::0;;;::::1;::::0;;349:139::o;219:124::-;2523:6;;-1:-1:-1;;;;;2523:6:4;2533:10;2523:20;2515:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;316:1:::1;298:6:::0;-1:-1:-1;;;;;298:6:4::1;:20:::0;294:42:::1;;320:6;:16:::0;;-1:-1:-1;;320:16:4::1;-1:-1:-1::0;;;;;320:16:4;::::1;;::::0;;294:42:::1;219:124:::0;:::o",
  "source": "pragma solidity ^0.6.6;\n\nimport \"./DaiLendingAdapter.sol\";\n\ncontract DaiLendingService {\n    address _owner;\n    DaiLendingAdapter _daiLendingAdapter;\n\n    constructor() public {\n        _owner = msg.sender;\n    }\n\n    function transferOwnership(address account) external onlyOwner() {\n        if (_owner != address(0)) _owner = account;\n    }\n\n    function updateAdapter(address adapterAddress) external onlyOwner() {\n        _daiLendingAdapter = DaiLendingAdapter(adapterAddress);\n    }\n\n    function getPricePerFullShare() external view returns (uint256) {\n        return _daiLendingAdapter.GetPricePerFullShare();\n    }\n\n    /*\n        -   Before calling this function, ensure that the msg.sender or caller has given this contract address\n            approval to transfer money on its behalf to another address\n    */\n    function save(uint256 amount) external {\n        _daiLendingAdapter.save(amount, msg.sender);\n    }\n\n    //  Get the user's shares or the yDai tokens\n    function userShares() external view returns (uint256) {\n        return _daiLendingAdapter.GetYDaiBalance(msg.sender);\n    }\n\n    //  Get the user's Dai balance\n    function userDaiBalance() external view returns (uint256) {\n        return _daiLendingAdapter.GetDaiBalance(msg.sender);\n    }\n\n    //  Get the gross revenue the user has made ( shares * current share price )\n    function GetUserGrossRevenue() external view returns (uint256) {\n        return _daiLendingAdapter.GetGrossRevenue(msg.sender);\n    }\n\n    //  Get the net revenue the user has made ( (shares * current share price) - total invested amount)\n    function GetNetRevenue() external view returns (uint256) {\n        return _daiLendingAdapter.GetNetRevenue(msg.sender);\n    }\n\n    function Withdraw(uint256 amount) external {\n        _daiLendingAdapter.Withdraw(amount, msg.sender);\n    }\n\n    function WithdrawByShares(uint256 amount, uint256 sharesAmount) external {\n        _daiLendingAdapter.WithdrawByShares(amount, msg.sender, sharesAmount);\n    }\n\n    function WithdrawBySharesOnly(uint256 sharesAmount) external {\n        _daiLendingAdapter.WithdrawBySharesOnly(msg.sender, sharesAmount);\n    }\n\n    function GetDaiLendingAdapterAddress() external view returns (address) {\n        return address(_daiLendingAdapter);\n    }\n\n    function TransferAdapterContractOwnership(\n        address payable newServiceContract\n    ) external onlyOwner {\n        _daiLendingAdapter.transferContractOwnership(newServiceContract);\n    }\n\n    modifier onlyOwner() {\n        require(_owner == msg.sender, \"Only owner can make this call\");\n        _;\n    }\n}\n",
  "sourcePath": "/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingService.sol",
  "ast": {
    "absolutePath": "/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingService.sol",
    "exportedSymbols": {
      "DaiLendingService": [
        2973
      ]
    },
    "id": 2974,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2771,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".6"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingAdapter.sol",
        "file": "./DaiLendingAdapter.sol",
        "id": 2772,
        "nodeType": "ImportDirective",
        "scope": 2974,
        "sourceUnit": 2770,
        "src": "25:33:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2973,
        "linearizedBaseContracts": [
          2973
        ],
        "name": "DaiLendingService",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 2774,
            "mutability": "mutable",
            "name": "_owner",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2973,
            "src": "93:14:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 2773,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "93:7:4",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2776,
            "mutability": "mutable",
            "name": "_daiLendingAdapter",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2973,
            "src": "113:36:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
              "typeString": "contract DaiLendingAdapter"
            },
            "typeName": {
              "contractScope": null,
              "id": 2775,
              "name": "DaiLendingAdapter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2769,
              "src": "113:17:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                "typeString": "contract DaiLendingAdapter"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2784,
              "nodeType": "Block",
              "src": "177:36:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2779,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2774,
                      "src": "187:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2780,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "196:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 2781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "196:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "187:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2783,
                  "nodeType": "ExpressionStatement",
                  "src": "187:19:4"
                }
              ]
            },
            "documentation": null,
            "id": 2785,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2777,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "167:2:4"
            },
            "returnParameters": {
              "id": 2778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "177:0:4"
            },
            "scope": 2973,
            "src": "156:57:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2803,
              "nodeType": "Block",
              "src": "284:59:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2792,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2774,
                      "src": "298:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "316:1:4",
                          "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": 2794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "308:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2793,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "308:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "298:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2802,
                  "nodeType": "IfStatement",
                  "src": "294:42:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2798,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2774,
                        "src": "320:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 2799,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2787,
                        "src": "329:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "320:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2801,
                    "nodeType": "ExpressionStatement",
                    "src": "320:16:4"
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "f2fde38b",
            "id": 2804,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 2790,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2789,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "272:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "272:11:4"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2787,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2804,
                  "src": "246:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "246:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "245:17:4"
            },
            "returnParameters": {
              "id": 2791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "284:0:4"
            },
            "scope": 2973,
            "src": "219:124:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2817,
              "nodeType": "Block",
              "src": "417:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2811,
                      "name": "_daiLendingAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2776,
                      "src": "427:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                        "typeString": "contract DaiLendingAdapter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2813,
                          "name": "adapterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2806,
                          "src": "466:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 2812,
                        "name": "DaiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2769,
                        "src": "448:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DaiLendingAdapter_$2769_$",
                          "typeString": "type(contract DaiLendingAdapter)"
                        }
                      },
                      "id": 2814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "448:33:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                        "typeString": "contract DaiLendingAdapter"
                      }
                    },
                    "src": "427:54:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                      "typeString": "contract DaiLendingAdapter"
                    }
                  },
                  "id": 2816,
                  "nodeType": "ExpressionStatement",
                  "src": "427:54:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "82f9a869",
            "id": 2818,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 2809,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2808,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "405:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "405:11:4"
              }
            ],
            "name": "updateAdapter",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2806,
                  "mutability": "mutable",
                  "name": "adapterAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2818,
                  "src": "372:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:24:4"
            },
            "returnParameters": {
              "id": 2810,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "417:0:4"
            },
            "scope": 2973,
            "src": "349:139:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2827,
              "nodeType": "Block",
              "src": "558:65:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2823,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "575:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetPricePerFullShare",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2352,
                      "src": "575:39:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 2825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "575:41:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2822,
                  "id": 2826,
                  "nodeType": "Return",
                  "src": "568:48:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "77c7b8fc",
            "id": 2828,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPricePerFullShare",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "523:2:4"
            },
            "returnParameters": {
              "id": 2822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2821,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2828,
                  "src": "549:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2820,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "549:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "548:9:4"
            },
            "scope": 2973,
            "src": "494:129:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2841,
              "nodeType": "Block",
              "src": "865:60:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2836,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2830,
                        "src": "899:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2837,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "907:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "907:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2833,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "875:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "save",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2404,
                      "src": "875:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address) external"
                      }
                    },
                    "id": 2839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "875:43:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2840,
                  "nodeType": "ExpressionStatement",
                  "src": "875:43:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "1b862027",
            "id": 2842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "save",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2830,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2842,
                  "src": "840:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2829,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "840:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "839:16:4"
            },
            "returnParameters": {
              "id": 2832,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "865:0:4"
            },
            "scope": 2973,
            "src": "826:99:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2853,
              "nodeType": "Block",
              "src": "1034:69:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2849,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1085:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1085:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2847,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1051:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetYDaiBalance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2365,
                      "src": "1051:33:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1051:45:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2846,
                  "id": 2852,
                  "nodeType": "Return",
                  "src": "1044:52:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0db8d01e",
            "id": 2854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "userShares",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "999:2:4"
            },
            "returnParameters": {
              "id": 2846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2845,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2854,
                  "src": "1025:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1025:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1024:9:4"
            },
            "scope": 2973,
            "src": "980:123:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2865,
              "nodeType": "Block",
              "src": "1202:68:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2861,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1252:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1252:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2859,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1219:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetDaiBalance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2378,
                      "src": "1219:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1219:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2858,
                  "id": 2864,
                  "nodeType": "Return",
                  "src": "1212:51:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "77f1a4af",
            "id": 2866,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "userDaiBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2855,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1167:2:4"
            },
            "returnParameters": {
              "id": 2858,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2857,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2866,
                  "src": "1193:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1193:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1192:9:4"
            },
            "scope": 2973,
            "src": "1144:126:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2877,
              "nodeType": "Block",
              "src": "1420:70:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2873,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1472:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1472:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2871,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1437:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2872,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetGrossRevenue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2430,
                      "src": "1437:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1437:46:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2870,
                  "id": 2876,
                  "nodeType": "Return",
                  "src": "1430:53:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6e0d5ff1",
            "id": 2878,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetUserGrossRevenue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2867,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1385:2:4"
            },
            "returnParameters": {
              "id": 2870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2869,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2878,
                  "src": "1411:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1411:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1410:9:4"
            },
            "scope": 2973,
            "src": "1357:133:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2889,
              "nodeType": "Block",
              "src": "1657:68:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2885,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1707:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2886,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1707:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2883,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1674:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetNetRevenue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2472,
                      "src": "1674:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1674:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2882,
                  "id": 2888,
                  "nodeType": "Return",
                  "src": "1667:51:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0bbea0d9",
            "id": 2890,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetNetRevenue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1622:2:4"
            },
            "returnParameters": {
              "id": 2882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2881,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2890,
                  "src": "1648:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2880,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1648:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1647:9:4"
            },
            "scope": 2973,
            "src": "1600:125:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2903,
              "nodeType": "Block",
              "src": "1774:64:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2898,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "1812:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2899,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1820:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1820:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2895,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1784:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2558,
                      "src": "1784:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address) external"
                      }
                    },
                    "id": 2901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1784:47:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2902,
                  "nodeType": "ExpressionStatement",
                  "src": "1784:47:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "5b6b431d",
            "id": 2904,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "Withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2892,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2904,
                  "src": "1749:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1749:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1748:16:4"
            },
            "returnParameters": {
              "id": 2894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1774:0:4"
            },
            "scope": 2973,
            "src": "1731:107:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2920,
              "nodeType": "Block",
              "src": "1917:86:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2914,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2906,
                        "src": "1963:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2915,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1971:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1971:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2917,
                        "name": "sharesAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2908,
                        "src": "1983:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2911,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1927:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "WithdrawByShares",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2643,
                      "src": "1927:35:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256) external"
                      }
                    },
                    "id": 2918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1927:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2919,
                  "nodeType": "ExpressionStatement",
                  "src": "1927:69:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "7057f929",
            "id": 2921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "WithdrawByShares",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2906,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2921,
                  "src": "1870:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1870:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2908,
                  "mutability": "mutable",
                  "name": "sharesAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2921,
                  "src": "1886:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2907,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1886:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1869:38:4"
            },
            "returnParameters": {
              "id": 2910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1917:0:4"
            },
            "scope": 2973,
            "src": "1844:159:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2934,
              "nodeType": "Block",
              "src": "2070:82:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2929,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2120:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2930,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2120:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2931,
                        "name": "sharesAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2923,
                        "src": "2132:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2926,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2080:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2928,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "WithdrawBySharesOnly",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2716,
                      "src": "2080:39:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 2932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2080:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2933,
                  "nodeType": "ExpressionStatement",
                  "src": "2080:65:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6583d12a",
            "id": 2935,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "WithdrawBySharesOnly",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2923,
                  "mutability": "mutable",
                  "name": "sharesAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2935,
                  "src": "2039:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2039:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2038:22:4"
            },
            "returnParameters": {
              "id": 2925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2070:0:4"
            },
            "scope": 2973,
            "src": "2009:143:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2945,
              "nodeType": "Block",
              "src": "2229:51:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2942,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2254:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      ],
                      "id": 2941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2246:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 2940,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2246:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 2943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2246:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2939,
                  "id": 2944,
                  "nodeType": "Return",
                  "src": "2239:34:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "593669aa",
            "id": 2946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetDaiLendingAdapterAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2936,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2194:2:4"
            },
            "returnParameters": {
              "id": 2939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2938,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2946,
                  "src": "2220:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2937,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2220:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2219:9:4"
            },
            "scope": 2973,
            "src": "2158:122:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2959,
              "nodeType": "Block",
              "src": "2397:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2956,
                        "name": "newServiceContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "2452:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2953,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2407:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferContractOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5521,
                      "src": "2407:44:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable) external"
                      }
                    },
                    "id": 2957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2407:64:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2958,
                  "nodeType": "ExpressionStatement",
                  "src": "2407:64:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0fcf3b3e",
            "id": 2960,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2951,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2950,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "2387:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2387:9:4"
              }
            ],
            "name": "TransferAdapterContractOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2949,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2948,
                  "mutability": "mutable",
                  "name": "newServiceContract",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2960,
                  "src": "2337:34:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2337:15:4",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:50:4"
            },
            "returnParameters": {
              "id": 2952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2397:0:4"
            },
            "scope": 2973,
            "src": "2286:192:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2971,
              "nodeType": "Block",
              "src": "2505:90:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2963,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2774,
                          "src": "2523:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2964,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2533:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2533:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2523:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c",
                        "id": 2967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2545:31:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d120cb8b681bc08b5cb8a76716f332701de835f21ac55aa57d10b91adef7f155",
                          "typeString": "literal_string \"Only owner can make this call\""
                        },
                        "value": "Only owner can make this call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d120cb8b681bc08b5cb8a76716f332701de835f21ac55aa57d10b91adef7f155",
                          "typeString": "literal_string \"Only owner can make this call\""
                        }
                      ],
                      "id": 2962,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2515:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2515:62:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2969,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:62:4"
                },
                {
                  "id": 2970,
                  "nodeType": "PlaceholderStatement",
                  "src": "2587:1:4"
                }
              ]
            },
            "documentation": null,
            "id": 2972,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 2961,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2502:2:4"
            },
            "src": "2484:111:4",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2974,
        "src": "60:2537:4"
      }
    ],
    "src": "0:2598:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingService.sol",
    "exportedSymbols": {
      "DaiLendingService": [
        2973
      ]
    },
    "id": 2974,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2771,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".6"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/mac/Desktop/BinaryHiils/yearn-savings/Tests/contracts/DaiLendingAdapter.sol",
        "file": "./DaiLendingAdapter.sol",
        "id": 2772,
        "nodeType": "ImportDirective",
        "scope": 2974,
        "sourceUnit": 2770,
        "src": "25:33:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2973,
        "linearizedBaseContracts": [
          2973
        ],
        "name": "DaiLendingService",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 2774,
            "mutability": "mutable",
            "name": "_owner",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2973,
            "src": "93:14:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 2773,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "93:7:4",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 2776,
            "mutability": "mutable",
            "name": "_daiLendingAdapter",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 2973,
            "src": "113:36:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
              "typeString": "contract DaiLendingAdapter"
            },
            "typeName": {
              "contractScope": null,
              "id": 2775,
              "name": "DaiLendingAdapter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2769,
              "src": "113:17:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                "typeString": "contract DaiLendingAdapter"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2784,
              "nodeType": "Block",
              "src": "177:36:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2779,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2774,
                      "src": "187:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2780,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "196:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 2781,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "196:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "187:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2783,
                  "nodeType": "ExpressionStatement",
                  "src": "187:19:4"
                }
              ]
            },
            "documentation": null,
            "id": 2785,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2777,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "167:2:4"
            },
            "returnParameters": {
              "id": 2778,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "177:0:4"
            },
            "scope": 2973,
            "src": "156:57:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2803,
              "nodeType": "Block",
              "src": "284:59:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2792,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2774,
                      "src": "298:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "316:1:4",
                          "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": 2794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "308:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2793,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "308:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "298:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2802,
                  "nodeType": "IfStatement",
                  "src": "294:42:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2798,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2774,
                        "src": "320:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 2799,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2787,
                        "src": "329:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "320:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2801,
                    "nodeType": "ExpressionStatement",
                    "src": "320:16:4"
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "f2fde38b",
            "id": 2804,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 2790,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2789,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "272:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "272:11:4"
              }
            ],
            "name": "transferOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2787,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2804,
                  "src": "246:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "246:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "245:17:4"
            },
            "returnParameters": {
              "id": 2791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "284:0:4"
            },
            "scope": 2973,
            "src": "219:124:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2817,
              "nodeType": "Block",
              "src": "417:71:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2811,
                      "name": "_daiLendingAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2776,
                      "src": "427:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                        "typeString": "contract DaiLendingAdapter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2813,
                          "name": "adapterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2806,
                          "src": "466:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 2812,
                        "name": "DaiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2769,
                        "src": "448:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DaiLendingAdapter_$2769_$",
                          "typeString": "type(contract DaiLendingAdapter)"
                        }
                      },
                      "id": 2814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "448:33:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                        "typeString": "contract DaiLendingAdapter"
                      }
                    },
                    "src": "427:54:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                      "typeString": "contract DaiLendingAdapter"
                    }
                  },
                  "id": 2816,
                  "nodeType": "ExpressionStatement",
                  "src": "427:54:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "82f9a869",
            "id": 2818,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 2809,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2808,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "405:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "405:11:4"
              }
            ],
            "name": "updateAdapter",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2806,
                  "mutability": "mutable",
                  "name": "adapterAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2818,
                  "src": "372:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:24:4"
            },
            "returnParameters": {
              "id": 2810,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "417:0:4"
            },
            "scope": 2973,
            "src": "349:139:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2827,
              "nodeType": "Block",
              "src": "558:65:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2823,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "575:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetPricePerFullShare",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2352,
                      "src": "575:39:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 2825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "575:41:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2822,
                  "id": 2826,
                  "nodeType": "Return",
                  "src": "568:48:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "77c7b8fc",
            "id": 2828,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPricePerFullShare",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "523:2:4"
            },
            "returnParameters": {
              "id": 2822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2821,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2828,
                  "src": "549:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2820,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "549:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "548:9:4"
            },
            "scope": 2973,
            "src": "494:129:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2841,
              "nodeType": "Block",
              "src": "865:60:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2836,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2830,
                        "src": "899:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2837,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "907:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "907:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2833,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "875:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "save",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2404,
                      "src": "875:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address) external"
                      }
                    },
                    "id": 2839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "875:43:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2840,
                  "nodeType": "ExpressionStatement",
                  "src": "875:43:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "1b862027",
            "id": 2842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "save",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2830,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2842,
                  "src": "840:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2829,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "840:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "839:16:4"
            },
            "returnParameters": {
              "id": 2832,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "865:0:4"
            },
            "scope": 2973,
            "src": "826:99:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2853,
              "nodeType": "Block",
              "src": "1034:69:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2849,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1085:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1085:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2847,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1051:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetYDaiBalance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2365,
                      "src": "1051:33:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1051:45:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2846,
                  "id": 2852,
                  "nodeType": "Return",
                  "src": "1044:52:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0db8d01e",
            "id": 2854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "userShares",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "999:2:4"
            },
            "returnParameters": {
              "id": 2846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2845,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2854,
                  "src": "1025:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1025:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1024:9:4"
            },
            "scope": 2973,
            "src": "980:123:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2865,
              "nodeType": "Block",
              "src": "1202:68:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2861,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1252:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1252:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2859,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1219:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetDaiBalance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2378,
                      "src": "1219:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1219:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2858,
                  "id": 2864,
                  "nodeType": "Return",
                  "src": "1212:51:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "77f1a4af",
            "id": 2866,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "userDaiBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2855,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1167:2:4"
            },
            "returnParameters": {
              "id": 2858,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2857,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2866,
                  "src": "1193:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1193:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1192:9:4"
            },
            "scope": 2973,
            "src": "1144:126:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2877,
              "nodeType": "Block",
              "src": "1420:70:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2873,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1472:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1472:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2871,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1437:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2872,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetGrossRevenue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2430,
                      "src": "1437:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1437:46:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2870,
                  "id": 2876,
                  "nodeType": "Return",
                  "src": "1430:53:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6e0d5ff1",
            "id": 2878,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetUserGrossRevenue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2867,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1385:2:4"
            },
            "returnParameters": {
              "id": 2870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2869,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2878,
                  "src": "1411:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1411:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1410:9:4"
            },
            "scope": 2973,
            "src": "1357:133:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2889,
              "nodeType": "Block",
              "src": "1657:68:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2885,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1707:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2886,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1707:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2883,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1674:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "GetNetRevenue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2472,
                      "src": "1674:32:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 2887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1674:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2882,
                  "id": 2888,
                  "nodeType": "Return",
                  "src": "1667:51:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0bbea0d9",
            "id": 2890,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetNetRevenue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1622:2:4"
            },
            "returnParameters": {
              "id": 2882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2881,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2890,
                  "src": "1648:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2880,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1648:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1647:9:4"
            },
            "scope": 2973,
            "src": "1600:125:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2903,
              "nodeType": "Block",
              "src": "1774:64:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2898,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "1812:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2899,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1820:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1820:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2895,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1784:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "Withdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2558,
                      "src": "1784:27:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address) external"
                      }
                    },
                    "id": 2901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1784:47:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2902,
                  "nodeType": "ExpressionStatement",
                  "src": "1784:47:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "5b6b431d",
            "id": 2904,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "Withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2892,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2904,
                  "src": "1749:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1749:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1748:16:4"
            },
            "returnParameters": {
              "id": 2894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1774:0:4"
            },
            "scope": 2973,
            "src": "1731:107:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2920,
              "nodeType": "Block",
              "src": "1917:86:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2914,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2906,
                        "src": "1963:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2915,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1971:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1971:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2917,
                        "name": "sharesAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2908,
                        "src": "1983:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2911,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "1927:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "WithdrawByShares",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2643,
                      "src": "1927:35:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256) external"
                      }
                    },
                    "id": 2918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1927:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2919,
                  "nodeType": "ExpressionStatement",
                  "src": "1927:69:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "7057f929",
            "id": 2921,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "WithdrawByShares",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2906,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2921,
                  "src": "1870:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1870:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2908,
                  "mutability": "mutable",
                  "name": "sharesAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2921,
                  "src": "1886:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2907,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1886:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1869:38:4"
            },
            "returnParameters": {
              "id": 2910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1917:0:4"
            },
            "scope": 2973,
            "src": "1844:159:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2934,
              "nodeType": "Block",
              "src": "2070:82:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2929,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2120:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2930,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2120:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2931,
                        "name": "sharesAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2923,
                        "src": "2132:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2926,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2080:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2928,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "WithdrawBySharesOnly",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2716,
                      "src": "2080:39:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 2932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2080:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2933,
                  "nodeType": "ExpressionStatement",
                  "src": "2080:65:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "6583d12a",
            "id": 2935,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "WithdrawBySharesOnly",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2923,
                  "mutability": "mutable",
                  "name": "sharesAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2935,
                  "src": "2039:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2922,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2039:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2038:22:4"
            },
            "returnParameters": {
              "id": 2925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2070:0:4"
            },
            "scope": 2973,
            "src": "2009:143:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2945,
              "nodeType": "Block",
              "src": "2229:51:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2942,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2254:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      ],
                      "id": 2941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2246:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 2940,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2246:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 2943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2246:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 2939,
                  "id": 2944,
                  "nodeType": "Return",
                  "src": "2239:34:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "593669aa",
            "id": 2946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "GetDaiLendingAdapterAddress",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2936,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2194:2:4"
            },
            "returnParameters": {
              "id": 2939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2938,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2946,
                  "src": "2220:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2937,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2220:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2219:9:4"
            },
            "scope": 2973,
            "src": "2158:122:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2959,
              "nodeType": "Block",
              "src": "2397:81:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2956,
                        "name": "newServiceContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "2452:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2953,
                        "name": "_daiLendingAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2776,
                        "src": "2407:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DaiLendingAdapter_$2769",
                          "typeString": "contract DaiLendingAdapter"
                        }
                      },
                      "id": 2955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferContractOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5521,
                      "src": "2407:44:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable) external"
                      }
                    },
                    "id": 2957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2407:64:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2958,
                  "nodeType": "ExpressionStatement",
                  "src": "2407:64:4"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0fcf3b3e",
            "id": 2960,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2951,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2950,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2972,
                  "src": "2387:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2387:9:4"
              }
            ],
            "name": "TransferAdapterContractOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2949,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2948,
                  "mutability": "mutable",
                  "name": "newServiceContract",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2960,
                  "src": "2337:34:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2337:15:4",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2327:50:4"
            },
            "returnParameters": {
              "id": 2952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2397:0:4"
            },
            "scope": 2973,
            "src": "2286:192:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2971,
              "nodeType": "Block",
              "src": "2505:90:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2963,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2774,
                          "src": "2523:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2964,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2533:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2533:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2523:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206f776e65722063616e206d616b6520746869732063616c6c",
                        "id": 2967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2545:31:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d120cb8b681bc08b5cb8a76716f332701de835f21ac55aa57d10b91adef7f155",
                          "typeString": "literal_string \"Only owner can make this call\""
                        },
                        "value": "Only owner can make this call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d120cb8b681bc08b5cb8a76716f332701de835f21ac55aa57d10b91adef7f155",
                          "typeString": "literal_string \"Only owner can make this call\""
                        }
                      ],
                      "id": 2962,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2515:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2515:62:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2969,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:62:4"
                },
                {
                  "id": 2970,
                  "nodeType": "PlaceholderStatement",
                  "src": "2587:1:4"
                }
              ]
            },
            "documentation": null,
            "id": 2972,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 2961,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2502:2:4"
            },
            "src": "2484:111:4",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2974,
        "src": "60:2537:4"
      }
    ],
    "src": "0:2598:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {},
      "links": {},
      "address": "0xd14700d537E718484195E622f20656F1BC5926bd",
      "transactionHash": "0x67c6f1047295d6e03160514c83e702d234eb4cd1b1da232cb7389803de3947f3"
    },
    "4": {
      "events": {},
      "links": {},
      "address": "0xA404e3c6bbe613cfd5e1100C5264D2f8755B9C17",
      "transactionHash": "0x7e59473d8be7d1af69ed0e67f83a345885e4b9be46c865383a0849ca5408f25b"
    }
  },
  "schemaVersion": "3.3.2",
  "updatedAt": "2021-02-03T15:04:17.065Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}